2009-10-21 26 views
7

Anlayışım, .NET'in DLL dosyaları için gerçekten "yapılandırma" yapmamasıdır - yalnızca ana Yürütülebilir veya Web Uygulaması bir yapılandırma dosyası alır ve bundan sonra Yürütülebilir/Web Uygulaması tarafından başvurulan tüm DLL'ler okunur..NET DLL Ayarları ve Yapılandırması - neler oluyor?

Ancak, VS2008'de, bir Sınıf Kitaplığı (DLL) projesine Web Referansı eklerseniz, projeye bir Settings.Settings dosyası ve bir app.config dosyası ekler. Web Referansının ana URL'sini içerirler.

Peki bu dosyalar ne için? DLL'in yardımsız okumasını sağlamanın bir yolu yok, değil mi?

düzenleme: app.config ve Settings.Settings'in içeriği bir fark yaratıyor gibi görünüyor: DLL Project'in app.config dosyasındaki Web Referans URL'sinin değiştirilmesi (örneğin) kendi başına bir fark yaratmaz; app.config dosyasındaki URL'yi düzenler ve daha sonra Settings.Settings dosyasını açın, app.config dosyasında yaptığınız değişiklikler daha sonra Settings.Settings'e kopyalanır. Ve sonra, DLL çalışma zamanında yeni değeri alır. Bunu nasıl yapıyor?

düzenleme: Buradaki karışıklığımın bir kısmı, Settings.Settings ve app.config arasındaki farklar ve bunların birbirleriyle nasıl bir ilişki içinde olduğunun çok açık olmamasıdır, bu yüzden insanlar bu konuda da yardımcı olabilirler.

cevap

6

DLL onları okumak için hiçbir yolu yoktur, ama onlar gerçek Ayarlar dahil etmek istediğiniz olabilir ne senin DLL/Yapılandırma dosyası bir tüketiciye güçlü ipuçları konum

Düzenleme

OP - tarafından yapılan yoruma cevaben, ayarlarda en son düzenlenmiş olan ayarlar, çalışma zamanında doğru adın bir ayarı yoksa, varsayılan olarak kodun içine derlenir. İşte bu yüzden çalışıyor.

+0

Değişiklikler Settings.Settings dosyaya kopyalanan ve sonra onun kadar, çalışma zamanında yakalandı görünüyor sadece gösteri için değil. – codeulike

+0

Ah üzerindeki düzenlemeye bakın, teşekkürler. Ben app.config Settings.Settings ile ilgili yol çok açık değildi, bu yüzden senin düzenleme yardımcı olur. – codeulike

6

Visual Studio yerde bu şeyleri eklemek zorundadır ve bunu koymak istediğiniz uygulamayı bilmiyor Aşağıdakileri yaparak DLL için yapılandırma erişebilirsiniz.

var config = ConfigurationManager.OpenExeConfiguration("MyDll.dll.config"); 

sadece zaman Ben bir 3. parti uygulaması için bir DLL olarak bir eklenti yazdım ve yapılandırılabilir olması (benim çoğu kez sık sık şüpheliyim bir şey değil) DLL'm istedim bu yararlı buldum.

Genellikle ihtiyacınız olan yapılandırma parçalarını app.config veya web.config dosyanıza taşıyacaksınız.

Düzenle - Güncelliğiniz açısından mantıklı. Ayarlar kapsamındaki uygulama kapsam ayarları, uygulamanın app.config dosyasından gelir. Kapsamlı uygulama ayarları için, bu ayarları temsil eden gerçekten güçlü bir sınıf.

+0

Yani DLL'ler Settings.Settings dosyalarını kullanabilir ve çalışma zamanında okuyabilirler? Bu dosyaların içerikleri bir yapının ardından nereye gider? – codeulike

+0

Hayır, bir Settings.Settings dosyası olan DLL, app.config/web.config dosyasından okuyacaktır. Bu bulunamazsa, varsayılanlarına geri dönecektir. – RichardOD

+0

Sanırım app.config terimini kullanmam ile sizi kafam karıştıyorum. Ana uygulamanın yapılandırma dosyasını (MyApp.exe.config veya Web.config) kastediyorum. Benim için DLL yapılandırması gerçekten MyDll.dll.config. HTH – RichardOD

-2

DLL dosyasındaki yapılandırma dosyalarından okuma olasılığı vardır. Sadece bir projeye bir app.config dosyası ekleyin ve yapılandırma ayarlarını DLL içinden okuduğunuzdan emin olun. Dağıtıldığında, config dosyanızın "MyDLL.dll.config" (DLL dosyanızın "MyDLL.dll" olarak adlandırılmış olduğunu varsayarak) olması ve DLL ile aynı klasörde olması gerekir.

aşağıdaki kod benim dll benim connectionstring dönmelidir:

app.config için

return ConfigurationManager.AppSettings["ConnectionString"];

+4

İşe yaramayacak. – RichardOD

+0

Ayrıca, istediğim şey bu değil. Bir DLL dosyası ile bir config dosyası nasıl çalıştığını sormuyorum, Visual Studio neden bir DLL proje için eklemek için rahatsız ediyor soruyorum. – codeulike

+0

.NET 4.6'da test edildi ve bunun hala doğrulanmadığı onaylandı. – EM0

İlgili konular