2012-03-26 20 views
12

Basit bir sınıf kitaplığı geliştiriyorum projesi, bana bir dll verecek.Bir Class Kitaplığı projesindeki App.config öğesinden okuyun

Bir yapılandırma dosyasından okunacak belirli bir değer istedim. Bu yüzden projeme bir App.config dosyası ekledim.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <appSettings> 
    <add key="serviceUrl" value="test value" /> 
    </appSettings> 

    </configuration> 

Üstü benim App.config dosyasıdır ve

string strVal = System.Configuration.ConfigurationManager.AppSettings["serviceUrl"]; 

aşağıdaki Ama benim dize değişkeni herhangi bir değer almıyorum olarak şimdi bunu okumaya çalışıyorum.

enter image description here

Ben benzer şekilde bir web uygulaması için bu yapmıştı ve işe yaradı. Ama bir şekilde bu çalışmayı başaramıyorum.

Bir sınıf kitaplığı projesinde App.config dosyası bulundurma fikri ilk etapta doğru mu?

+0

Birden çok App.config dosyanız var mı? Hata ayıklamayı deneyin ve ConfigurationManager.AppSettings'deki Anahtar Sayısına bir göz atın, eğer 0 görüntüleniyorsa VS'nin uygulama yapılandırma dosyanızı algılamamış olduğunu varsayabilirim. –

+0

Tek app.config var ve hata ayıklamamın bir ekran görüntüsünü ekledim – Yasser

+0

Uygulama yapılandırma dosyasını sınıf projesine değil, ana projeye ekle. –

cevap

16

Benim yorumumda belirtildiği gibi, sınıf kitaplığı projesinde değil, ana çözüme App.Config dosyasını ekleyin.

+0

Çözümümde iki tane projem var 1. Sınıf kitaplığı 2. Test projesini nereye eklerim? – Yasser

+0

Test projesini deneyin –

+0

Bulunamadı! Darren için sayesinde denedim ve benim test projeye app.config eklendi ve ben ConfigurationManager.AppSetting yazarak gibi ... benim resharper tekrar System.Configuration sürüm 2.0 ve 4.0 bana çekici hatırladı hangi beni istenir 4.0 daha önce sınıf projemde kodlama yaparken geri gittim ve 4.0 referansını kaldırdım ve bir tane ekledim ve şimdi çalışıyor! – Yasser

6

App.config dosyasını eklemeniz gerekmez. o zaman web.config dosyasından doğrudan bağlantı dize getirebilir web tabanlı uygulama için sınıf kitaplığı oluşturursanız

VEYA

İçinde bağlantı dizesi ile herhangi bir metin dosyası eklemek ve bu dizeyi getirebilir

. sorusunu varsayarak bu

public static ConnectionStringSettings ConnSettings 
{ 
    get 
    { 
     string connectionStringKey = null; 
     connectionStringKey = ConfigurationManager.AppSettings.Get("DefaultConnectionString"); 
     return ConfigurationManager.ConnectionStrings[connectionStringKey];   
    } 
} 
+0

Cevabınız için teşekkürler, ve evet SO'ya hoş geldiniz! – Yasser

1

kullanılarak dll projeye özgü bir yapılandırma dosyayı istiyor, değil uygulama veya web uygulaması projenin yapılandırma dosyası, ben "sqlSection anahtarlardan değerleri almak için aşağıdaki kodu kullanılmış " Bölüm. (bir dikkat, bu yapılandırma dosyasının, her zaman kopyalanacak şekilde ayarlanmış olsa bile, otomatik olarak bir web uygulamasının kısmi bir yapısına kopyalanmamasıdır. Bu nedenle, dosyayı kopyalamak için harika tek satırlı ön yapım işlemini kullandım. Bu yazıda belirtilen https://stackoverflow.com/a/40158880/1935056).

burada tüm dll yapılandırma

<?xml version="1.0" encoding="utf-8" ?> 


<sqlSection> 

<add key="sql1" value="--statement--"/> 
</sqlSection> 

bu C# kodu dosyasını olduğunu.

string GetSqlStatement(string key) 
    { 
      string path = Path.GetDirectoryName(Assembly.GetCallingAssembly().CodeBase) + @"\DataLayer.dll.config"; 

     XDocument doc = XDocument.Load(path); 

     var query = doc.Descendants("sqlSection").Nodes().Cast<XElement>().Where(x => x.Attribute("key").Value.ToString() == key).FirstOrDefault(); 

     if (query != null) 
     { 
      return query.Attribute("value").Value.ToString(); 
     }