C # (.NET) ile programlı olarak bir web.config değiştirin


93

web.configC # ile programlı olarak nasıl değiştirebilirim / işleyebilirim ? Bir yapılandırma nesnesi kullanabilir miyim ve eğer öyleyse, bunu web.configbir yapılandırma nesnesine nasıl yükleyebilirim ? Bağlantı dizesini değiştiren tam bir örnek istiyorum. Değişiklikten sonra, web.configsabit diske geri yazılmalıdır.


ASP.NET 2.0 ve ASP.NET 3.5'te web.config'in Programlı olarak nasıl işleneceği hakkındaki blog gönderisine bakın Alternatif olarak, sorunuzun cevabını içeren bu soruyu kontrol edin. .Net'te programatik olarak bir bağlantı dizesi yapılandırmasını nasıl ayarlayabilirim?
Shoban

Yanıtlar:


115

İşte bazı kodlar:

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

Bu makalede daha fazla örnek görün , kimliğe bürünmeye bir göz atmanız gerekebilir .


Web.config dosyasındaki bağlantı dizenizin adı nedir?
Alex LE

makale bağlantısı kesik
Vitall

@AlexLE: web.config farklı bir konuma yerleştirildiğinde dosya konumunu nasıl belirleriz? Paylaşılan bir yolda uzak bir sunucu olabilir mi?
SharpCoder

@SharpCoder, yol sanal bir yoldur, bu nedenle önce web.config'i uzak sunucudan yerel uygulamanıza kopyalamanız gerekir (kendi web.config dosyanızı geçersiz kılmamak için bir geçici klasörün içinde), düzenleyin, kaydedin ve ardından geri kopyalayın uzak sunucuya. Veya daha iyi, daha karmaşık bir çözüm şu olabilir: işi çözen bir API oluşturun (web.config'i değiştirin), onu uzak sunucuya dağıtın ve ardından yerel sunucudan tüketin.
Guilherme Branco Stracini

@Skami, connectionStrings adını "MyConnectionString" olarak ayarlamanız gerekir; bu, section.ConnectionStrings ["MyConnectionString"] değerinin adla eşleşmesi gerektiği anlamına gelir.
Liakat

12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();

Bölüm değişkeninden User ID nasıl alınır?
Niks

5

Web.config dosyası xml dosyası olduğundan, xmldocument sınıfını kullanarak web.config dosyasını açabilirsiniz. Düğümü güncellemek istediğiniz xml dosyasından alın ve ardından xml dosyasını kaydedin.

web.config dosyasını program aracılığıyla nasıl güncelleyebileceğinizi daha ayrıntılı olarak açıklayan URL burada.

http://patelshailesh.com/index.php/update-web-config-programmatically

Not: web.config dosyasında herhangi bir değişiklik yaparsanız, ASP.NET bu değişiklikleri algılar ve uygulamanızı yeniden yükler (uygulama havuzunu geri dönüştürür) ve Oturum, Uygulama ve Önbellekte tutulan verilerin etkisi kaybolur (oturum durumu varsayılarak) InProc ve bir durum sunucusu veya veritabanı kullanmıyor).


Teknik olarak mümkün olduğunu biliyorum, Microsoft tarafından onaylanan / onaylanan yöntemin daha uzun ömürlü olacağını ve web.config'i kırmaya daha az tabi olacağını düşünüyorum. Hepimiz bu dosyaları "elle" güncelledik, ancak üretim web sunucuları için riskli olduğunu düşünüyorum. Sadece benim 2c.
Anthony Horne

2

Bu, AppSettings'i güncellemek için kullandığım bir yöntem, hem web hem de masaüstü uygulamaları için çalışıyor. ConnectionStrings'i düzenlemeniz gerekiyorsa, bu değeri içinden alabilir System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];ve ardından ile yeni bir değer ayarlayabilirsiniz config.ConnectionString = "your connection string";. Bu connectionStringsbölümdeki herhangi bir yorumunuz varsa Web.Configbunların kaldırılacağını unutmayın.

private void UpdateAppSettings(string key, string value)
{
    System.Configuration.Configuration configFile = null;
    if (System.Web.HttpContext.Current != null)
    {
        configFile =
            System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    }
    else
    {
        configFile =
            ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    }
    var settings = configFile.AppSettings.Settings;
    if (settings[key] == null)
    {
        settings.Add(key, value);
    }
    else
    {
        settings[key].Value = value;
    }
    configFile.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}

Bu kod iyi ve onu yükselttim, ancak appSettings başka bir dosyada tanımlandıysa çalışmayacak, örneğin: <appSettings file = "C: \ Client \ customSettings.config"> </appSettings>
Ben Junior
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.