2009-11-05 15 views
15

AppSetting anahtarını aşağıdaki adresteki derleme yapılandırma dosyasından almak istiyorum: MyAssembly.dll.config. İşte yapılandırma dosyasının bir örneği verilmiştir:AppSettings'i derleme yapılandırma dosyasından nasıl alabilirim?

<configuration> 
    <appSettings> 
     <add key="MyKey" value="MyVal"/> 
    </appSettings> 
</configuration> 

İşte geri almak için kod:

var myKey = ConfigurationManager.AppSettings["MyKey"]; 
+0

Olası kopyalar [I/yazma app.Config çalışma zamanı witho de ayarları okuyabilir nasıl kullanıcı ayarlarını kullanarak nasıl?] (https://stackoverflow.com/questions/3638754/how-can-i-read-write-app-config-settings-at-runtime-without-using-user-settings) – Matt

cevap

20

OpenMappedExeConfiguration'un kullanılması, sınıf kütüphanesinin yapılandırmasına bakmak için kullanabileceğiniz bir "Yapılandırma" nesnesini geri verir (ve orada bulunan ayarlar, ana uygulamada aynı adla olanları geçersiz kılar. yapılandırma):

dize seri = ConfigurationManager.AppSettings: ana uygulamanın yapılandırma özeldir ve sınıf kütüphanenin kendi config yoktur

ExeConfigurationFileMap map = new ExeConfigurationFileMap(); 
map.ExeConfigFilename = "ConfigLibrary.config"; 

Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

AppSettingsSection section = (libConfig.GetSection("appSettings") as AppSettingsSection); 
value = section.Settings["Test"].Value; 

Ama bu ayarlar hala ConfigurationManager statik sınıfının üzerinden erişilebilir ["Seri"];

Hala çalışıyor - sınıf kütüphanesinin yapılandırması yalnızca yapılandırma dosyasında bulunan ayarları gizler; Ayrıca, sınıf kütüphanesinin kendi yapılandırma ayarlarına erişmek için "libConfig örneğini kullanmanız gerekir.

İki dünya (ana app.config, classlibrary.config) tamamen ve çok mutlu birlikte olabilir. orada hiç sorun!

Marc

+1

Özel yapılandırma dosyamda appsettings düğümü yoksa ne olur? düğümüm var. Peki AppSettingsSection kullanmadan düğümleri nasıl edinilir? – Shesha

0
var uri = new Uri(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)); 
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine(uri.LocalPath, "MyAssembly.dll.config") }; 
var assemblyConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
+0

gerçekten değil - OpenMappedExeCOnfiguration çağrısından bir "Yapılandırma" nesnesi alırsınız ve bunu kullanırsanız, eşlenmiş yapılandırma dosyanızın içine bakarsınız, ancak "ConfigurationManager.AppSettings []' seçeneğini kullanırsanız, hala ana uygulamanın yapılandırmaları. –

0

Ayrıca bir XmlDocument olarak açacak ve XPath belgeyi gezinebilirsiniz. O zaman her zaman LinqToXml

6
var appSettings = ConfigurationManager.OpenExeConfiguration((Assembly.GetAssembly(typeof(MYASSEMBLY))).Location).AppSettings; 

o zaman yukarıdaki gibi yapabilirsiniz.

-1
Using System.Configuration 
Public Shared Function AppDomainConfiguration() As Configuration 
    Dim fileMap As New ExeConfigurationFileMap 
    fileMap.ExeConfigFilename = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 
    Return ConfigurationManager.OpenMappedExeConfiguration(fileMap,Configuration.ConfigurationUserLevel.None) 
End Function 
ait
İlgili konular