dll

2008-09-30 21 views
11
için App.config

Dinamik olarak (belirli bir dizinde bulunan herhangi bir şey) dll yükleyen ve yansıma yoluyla İş Akışı sınıflarını çağıran bir "motor" var.dll

Artık bir veritabanına erişim gerektiren bazı yeni İş Akışlarımız var, bu yüzden dll dizinine bir yapılandırma dosyası koyacağımı düşündüm.

Ancak bazı nedenlerden dolayı iş akışlarım yalnızca yapılandırma dosyasını göremiyor. Yukarıdaki yapılandırma dosyası Verilen

<configuration> 
    <appSettings> 
     <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" /> 
    </appSettings> 
</configuration> 

, aşağıdaki kod boş bir dize yazdırır:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]); 

Ben sadece bir yapılandırma dosya adını belirtmektir istediğini düşünüyorum, ama burada sorun yaşıyorum. Ben sadece sonuç alamıyorum. Herhangi birinin işaretçisi var mı?

+0

Sanırım bir fikir edinmek için videoma başvurmalısınız http://www.youtube.com/watch?v=juBDM3fb-i0 –

cevap

7

AppSettings'i okumak için kod örneğiniz DLL dosyanızda bulunuyorsa, DLL dosyasının yapılandırma dosyasını değil, uygulamanın yapılandırma dosyasını okumaya çalışır. Bunun nedeni, kodu çalıştırmak için Yansıma'yı kullanmanızdır.

+0

Teşekkürler. Bu çözüldü. – daharon

4

Komik, nerede olduğum çok benzer bir şey yapıyoruz ve yapılandırma dosyası çok iyi. Bizim durumumuzda, her yeni yapılandırma dosyasının isminin ilişkili montajınkiyle eşleştiğini düşünüyorum. Yani MyLibrary.dll bu dosya derleme için bilgi içeren MyLibrary.dll.config adlı bir dosya olurdu. Ayrıca, elimde kullandığım örnek, C# yerine VB.Net kullanıyor (her birinin bir kısmına sahibiz) ve VB'ye özel My.Settings ad alanı için tüm ayarlar. Bu yüzden ConfigurationManager sınıfını doğrudan onları oku. kendilerini şu şekilde görünecektir

ayarları:

<applicationSettings> 
    <MyLibrary.My.MySettings> 
     <setting name="SomeSetting" serializeAs="String"> 
      <value>12345</value> 
     </setting> 
    </MyLibrary.My.MySettings> 
</applicationSettings> 
0

Doğru hatırlamak, app.config uygulamanız dizinden yüklenecektir, bu nedenle başka bir dizinden DLL yüklüyorsanız, sen isteyeceksiniz uygulamanızın yapılandırma dosyasında ihtiyaç duydukları anahtarlar.

+0

Teşekkürler. Bu benim problemim gibi görünüyor. Etrafında bir şeyler değiştirdim ve şimdi çalışıyor. – daharon

0

Tamamen emin değilim, ancak bu sınıfın yalnızca varsayılan olarak AppDomain giriş yönteminin (çoğu zaman exe'nin yolu) yolu ile çalıştığını düşünüyorum. Farklı bir yapılandırma dosyasına işaret etmek için önce OpenExeConfiguration (string exePath) (Framework 2.0 ve üstü) çağırmanız gerekir.

1

Bunu benzer bir sistem için yazdım. Benim hatırlatmak için Assembly.GetExecutingAssemblyAssembly.GetExecutingAssembly dosya yolunu almak için kullanılan .config, bu ad için bir XmlDocument yüklendi, <appSettings> düğümüne gitti ve NameValueSectionHandler 's Create yöntemine geçirdi.

1

Tek yön - AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "config dosyası yolu");

Kurucuda arayın.