Soru .NET Config Dosyaları configSource uygulama dizini klasörü dışında


İki uygulama bir konsol uygulaması ve diğer bir ASP.NET uygulaması var. Her ikisi de aynı appSettings ve connectionStrings bilmek gerekir. Bu yüzden ideal olarak, merkezi bir konuma işaret etmek için app.config / web.config dosyalarının configSource özelliğini kullanmak istiyorum. Örneğin

<connectionStrings configSource="D:\connectionStrings.config"/>
<appSettings configSource="D:\appSettings.config"/>

Ancak bu bir hatayla başarısız olur:

ConfigSource özniteliği geçersiz: configSource 'D: \ appSettings.config' geçersiz. Aynı dizinde veya yapılandırma dosyası olarak bir alt dizindeki bir dosyaya başvurmalıdır.

Yine de yapılandırma yöneticileri appSettings / connectionStrings'i kullanmak ve değerleri harici bir konumdan almak var mı?
Bunu yapmak için kod eklemekten mutluyum, ancak tüm yapılandırma yöneticisi sistemini değiştirmek zorunda kalmak istemiyorum.


76
2018-02-20 10:54


Menşei




Cevaplar:


Başka bir çözüm ise, dosyalarınızı projelerinize kopyalamak yerine tüm projelerinizde konfigürasyon dosyasını bir link olarak eklemektir. Ardından, dosyanın "Oluşturma Eylemi" ni "İçerik" ve "Kopyalama Dizini'ne Kopyala" olarak "Daha yeni kopyala" olarak ayarlayın ve projeyi derlediğinizde, dosyanın çıkış dizininde olmasını sağlayabilirsiniz.

Dosyayı "Varolan Öğe Ekle" iletişim kutusunda bir bağlantı olarak eklemek için, açılır menüye sahip bir Ekle düğmesi bulunur. İşlemi tamamlamak için Ekle butonundaki açılır listeden "Bağlantı olarak ekle" yi seçin.


91
2018-03-28 22:56



merhaba, bu cevabı beğendim ve kendi projem için uygulamayı denedim ve her şey benim app yayınladığında iyi çalışıyor gibi görünüyor (db.config dediğiniz gibi webroot kopyalanır), ama VS hata ayıklama değil & Cassini. Bunun yerine "configsource dosyası db.config 'açılamıyor" özel durumu alıyorum. Bunu yapabilmek için kaçırdığım bir şey var mı? Teşekkürler! - Funka
Tabii ki sadece doğru karar verdikten sonra karar verdikten sonra bir yardım isteyin ve sonra doğru anlamaya çalışıyorum. Benim db.config olduğunu fark ettim Ayrıca / bin / klasörüne kopyalandı, bu yüzden web.config dosyasını configSource ve her şey iyi görünüyor. Tekrar teşekkürler! - Funka
@Funka - db.config dosyanızın "Oluşturma Eylemi" özelliği, varsayılan web.config gibi "İçerik" yerine "Yok" olarak ayarlandığından, sorun olup olmadığını kontrol edin. Ayarların "Oluşturma Eylemi" = "İçerik" ve "Çıkış Dizini'ne Kopyala" = "Kopyalama" olması gerektiğine inanıyorum. - Eric Burcham
Keşke 10 kere daha kazanabilseydim. - Saeed Neamati
Bu VS 2013 yılında hata ayıklama çalışırken çalışmıyor. Erics çözüm denedim ve bu da işe yaramadı. - Chris Nevill


AppSettings altında, configSource = yerine dosya = kullanabilirsiniz


29
2017-12-02 17:01



Benim için mükemmel bul! Teşekkürler!! Bununla birlikte, AppSettings'deki seçim tuşlarını gösterildiği gibi geçersiz kılabiliyorum. weblogs.asp.net/pwilson/archive/2003/04/09/5261.aspx - Saurabh Kumar


Görünüşe göre öyle görünüyor. configSource aynı klasörde veya daha derin olmalıdır.

Sen could, ben emin değilim seni melibir NTFS hardlink kullanın. [çılgın sırıtış]


16
2018-02-20 11:03





Yapılandırmayı isteğe bağlı bir konumdan yükleyebilirsiniz, fakat ConfigurationManager'ın statik özellikleri ile mevcut olmayacaktır:

Configuration myConfig = ConfigurationManager.OpenExeConfiguration(path)

(Birden çok dosya belirtilmesine izin veren, varsayılan / kullanıcı dolaşımı / kullanıcı yerel hiyerarşisini destekleyecek bir aşırı yükleme var.)

Statik özellikleri kaybetmek, tüm kodun farklı konfigürasyondan haberdar olması gerektiği anlamına gelir.


8
2018-02-20 11:01



Bu, tüm yapılandırma dosyasının yüklenmesini gerektirir. Ben sadece appSettings & connectionStrings aynı olması gerekir, dosyanın geri kalanı her uygulama için farklıdır, bu yüzden sorunu çözmez. - Robert MacLean
Bütün yapılandırma zaten normal (statik) özelliklerle yüklenir, bu yüzden bu gerçek bir fark yaratmaz. - Richard
Ayrıca, kendi XML formatınızı kullanabilir ve adını uygulamaların yapılandırma dosyalarına ekleyebilir ve doğrudan okuyabilirsiniz. - Richard


Visual Studio 2015

Web.Config ile bu sorunu yaşıyorsanız, kabul edilen yanıt doğrudur, ancak kendimi yüz avucuna verdiğimden beri genişletmek için:

'Bağlantı Ekle' seçeneğini kullanarak projenize bir .config dosyası eklediğinizde ve daha sonra 'Kopyala Daha Yeni Kopyala' veya 'Her Zaman Kopyala' bağlantısının Kopyala özelliğini ayarladığınızda, fiziksel dosya / bin klasörüne kopyalanır.

Bu nedenle, Web.Config içinde tanımlanan bir yapılandırma bölümünüz olduğunda:

 <section name="mySpecialConfig" type="System.Configuration.AppSettingsSection" requirePermission="false" />

daha sonra ilgili yapılandırma öğesini şöyle tanımlamalısınız:

  <mySpecialConfig configSource="bin\MySpecialConfig.config">
  </mySpecialConfig>

configSource fiziksel bin \ MySpecialConfig.config dosyasına işaret edecek şekilde bağlantıya değil  Ayrıca, yolun bir bağıl fiziksel yol.

Bu gülünç görünebilir gibi görünebilir ama eğer bunu yapmamışsanız fiziksel dosya henüz \ bin klasöründe değil, bu yüzden hemen tıklamayabilir.


4
2017-07-16 07:25





Her iki ayarı da machine.config ve daha sonra sunucudaki tüm uygulamalarınız için kullanılabilirler.


2
2018-02-20 11:01



Bu bir seçenek ancak makinedeki diğer uygulamaların kullanabileceği ayarları (ihtiyacım) istemiyorum. Endişe, bağlantı dizeleridir, diğer uygulamalarla çakışabilecek oldukça genel adlara sahiptirler. - Robert MacLean


En iyi çalıştığım çözüm, "paylaşımlı" yapılandırma dosyalarını merkezi bir dosyaya koymak ve daha sonra Visual Studio'da önceden oluşturulmuş bir olayı kullanarak bunları ihtiyaç duyulan her projenin göreceli bir klasörüne kopyalamaktı.


2
2018-03-11 11:02