2009-11-25 18 views
5

Bu son previous question belirtilen aynı şeyi yapmaya çalışıyorum.AppSettings farklı bir .config dosyasında güncellenmiyor Güncel

planım kendi dosyasında bu (appSettings) (Settings.config) sahip olmaktır, ben izinlerini değiştirmek verecektir için: Özünde, burada (tam olarak benim aynı durumdur) dava web süreci kullanıcısına hesap ve bu dosyada tüm düzenlenebilir ayarlarını saklayın (örneğin forum başlığı, açıklama, vb). Ben config.Save(ConfigurationSaveMode.Minimal, false) komutu kesilirken

sorun bu soruya kabul çözüm çünkü bunun, ayrı .config dosyasında appSettings kaydetme benim için çalışmıyor yani, bu ayrı her appSettings çoğaltır ana web.config dosyasının appSettings bölümüne (yeni değişikliklerle) dosya.

Temelde
Public Shared Function GetAppSetting(ByVal setting As String) As String 
    Dim config As System.Configuration.Configuration = _ 
      WebConfigurationManager.OpenWebConfiguration("~") 

    Return config.AppSettings.Settings(setting).Value 
End Function 

Public Shared Sub SetAppSetting(ByVal setting As String, ByVal value As String) 
    Dim config As System.Configuration.Configuration = _ 
      WebConfigurationManager.OpenWebConfiguration("~") 

    config.AppSettings.Settings(setting).Value = value 

    config.Save(ConfigurationSaveMode.Minimal, False) 
    ConfigurationManager.RefreshSection("appSettings") 
End Sub 

ben ayarları ayrı dosyada yerine ise web.config kaydedilmesini istediğiniz belirten olacağını nerede göremiyorum: Burada (vb.net olarak) benim son kod varsayılan olarak depolandıkları yer. Oh ve bu arada, web.config'in appSettings bölümüne 'file =' özniteliğini eklemek zorunda kaldım, böylece Settings.config appSettings aslında dikkate alınacaktır. Bu özellik olmadan yukarıdaki kod, ayrı .config dosya ayarlarını okumaz. İşte benim web.config appsettings bölümünün kısa bir özetini aşağıda:

<appSettings file="Settings.config"> 
    <add key="RestartApp" value="-1" /> 
    </appSettings> 

Ve işte benim Settings.config dosyasının ait tüm içeriğini var: değiştirilen ayarları ile biten Bunun yerine

<appSettings> 
    <add key="AppTitle" value="MVC Web Access" /> 
    <add key="DefaultWebpage" /> 
    <add key="CustomCSS" /> 
    <add key="TktsEmailTo" value="[email protected]" /> 
    <add key="EmailFrom" value="[email protected]" /> 
    <add key="EmailFromSMTP" value="mail.email.com" /> 
    <add key="EmailFromPW" value="fakePassword" /> 
    </appSettings> 

.save komutundan sonra benim Settings.config dosyasım, web.config dosyasındaki appSettings bölümü bu (ve Settings.config dosyası dokunulmamış olarak kalır):

<appSettings file="Settings.config"> 
    <add key="RestartApp" value="-1" /> 
    <add key="AppTitle" value="New title" /> 
    <add key="DefaultWebpage" value="index.aspx" /> 
    <add key="CustomCSS" /> 
    <add key="TktsEmailTo" value="[email protected]" /> 
    <add key="EmailFrom" value="[email protected]" /> 
    <add key="EmailFromSMTP" value="mail.email.com" /> 
    <add key="EmailFromPW" value="NewFakePassword" /> 
    </appSettings> 
+0

Hmm, Koduma başka bir göz atacağım ve yaptığınız şeyle herhangi bir fark olup olmadığını görebileceğim ... –

+0

Kurt - aslında benim örneğim * ayrı bir .config dosyası kullanıyordu ve İki kere kontrol ettim, onunla iyi çalışıyor. –

+0

Bir önceki soruya verdiğim yanıt, yayınlanmış olan kodun alınmasına odaklanmıştı - sadece web.config dosyasını işleyen kod. Bunu aslında ayrı bir konfigürasyon dosyası ile yapıp yapamayacağından emin değilim ... Keith aslında böyle yapmıyorsa. –

cevap

2

Sadece iki kez kontrol - Görebildiğim kadarıyla tek fark ben, şimdi kullanıyorum çalışma ve benim ayrı ayarlar dosyasına ayarları kaydetmeden hangi kod İşte

 
<appSettings configSource="Settings.config"/> 

kullanılarak olmam (Settings.config):

Eğer appSettings tuş üzerinde configSource kullanmak ne olur
 
var config = WebConfigurationManager.OpenWebConfiguration("~"); 

foreach (var key in collection.Keys) 
{ 
    if (config.AppSettings.Settings[key.ToString()] != null) 
    { 
     config.AppSettings.Settings[key.ToString()].Value = collection[key.ToString()]; 
    } 
} 

config.Save(ConfigurationSaveMode.Minimal, false); 
ConfigurationManager.RefreshSection("appSettings"); 

?

+0

Bir deneme yapacağım ... Bu ayarı okudum ama denemedim çünkü kullanıldıklarında, ayrı appSettings ile harici bir .config dosyasına ve ayrıca ek appSettings'e sahip olabileceğimi anladım. web.config dosyasının ilgili bölümü.Kullanıcıya uygulamayı yeniden başlatma ve her zaman bir appSettings değişikliğinde her zaman yeniden başlatma seçeneği vermemek için "" ayarını tutmak istedim. Her neyse, bu seçeneği test edip yanıtla geri döneceğim. Teşekkürler. –

+0

Aynı sorunu yaşadım. ConfigSource'a geçme sorunumu çözdü. Teşekkürler. –

İlgili konular