2011-03-07 15 views
5

Ayarları bir user.config dosyasına kaydeden bir ana uygulamam var.Herhangi bir .net uygulamasının user.config dosyasının yerini alma

Bu dosyadan bir ayar okuması gereken ikinci bir uygulamam var.

Ana uygulamanın user.config dosyasının yerini almanın basit/zarif bir yolu var mı?

Ben

[Application.LocalUserAppDataPath] [CompanyName] [AppName guid çeşit +] [Uygulama sürümü]

ama görünüyor

elle yolunu inşa edebileceğini tahmin kudretli bir şekilde hacky.

cevap

1
escpecially, kullanıcı yapılandırma dosyası genellikle uygulamaya inşa edilir yaşadığı yere parçaları

[CompanyName][AppName + some sort of guid][App version] 

bir yol oluşturmak için mantık böylece çerçeve sormak genel yolu yoktur

kullanıcı yapılandırma saklanır.

Ancak, bu işlev size tüm uygulamalar için aynı kullanıcı yapılandırmasını alır bu

static Configuration GetMainConfig() 
{ 
    string mainPgmConfigDir = GetMainProgramConfigDir(); 
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap(); 
    configFile.ExeConfigFilename = Path.Combine(mainPgmConfigDir, "user.config"); 
    return ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None); 
} 

static string GetMainProgramConfigDir() 
{ 
    string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
    string companyDir = Path.Combine(appDataDir, VersionInfo.Company); 
    string productDir = Path.Combine(companyDir, "yourProgramName"); 
    string versionDir = Path.Combine(productDir, "yourVersionNumber"); 
    return versionDir; 
} 

gibi bir işlevi içeren tüm uygulamalar için ortak bir DLL sağlayarak program sistem için bu sorunu çözdü.

+0

Tamam, zaman ayırdığınız için teşekkürler. Bu iyi bir çözüm gibi görünüyor .. –

0

Yapacağınız şeye göre değişir. Yükleme yolunu temel dizin olarak kullanmak isteyebilirsiniz. Veya bir yükleyici kullanıyorsanız bir kayıt defteri değeri ayarlayın. Ve belki paylaşılan değerleri ile bağımsız bir yapılandırma dosyası oluşturabilirsiniz? Bu şekilde değerleri karıştırmazsınız. Size çok şey söylemediğinden, sizin için uygun olup olmadığını göremiyorum. Yani, bu sadece fikirler.

0

Configuration nesnesine uygulama yapılandırması yüklemek ve daha sonra oradan dosya adını almak için ConfigurationManager kullanabilirsiniz: Farklı ConfigurationUserLevel değerleri kullanabilirsiniz

Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
string userConfigFilePath = cfg.FileName; 

Not küresel yerel veya gezici ayarlarına erişmek için.

Düzenleme: Exe dosya adını argüman olarak alan OpenExeConfiguration() sürümü yalnızca uygulama yapılandırma dosyasına değil, kullanıcı yapılandırmasına erişim sağlar.

+0

Cevabınız için teşekkürler. Nasıl farklı bir uygulamadan yapılandırma dosyasını almak için bunu kullanabilirim? –

+1

ConfigurationManager.OpenExeConfiguration(), exe yolunu argüman olarak alan bir sürüme sahiptir: http://msdn.microsoft.com/en-us/library/ms224437.aspx –

+1

-1 Bir sürümü kabul eden sürümü anlatabilirim exe yolu sadece App.config dosyasını verecektir. Yanıtınızı farklı bir uygulamanın user.config dosyasını nasıl edineceğinizle güncelleyin ve oylamayı kaldırırım. –

İlgili konular