asp.net - 配列 - 実行時にweb.config appSettingsをどのように変更しますか?




controlrenderingcompatibilityversion (5)

私は実行時にweb.config appSettings値を変更する方法を混乱させています。 たとえば、私はこのappSettingsセクションを持っています:

<appSettings>
  <add key="productspagedesc" value="TODO: Edit this default message" />
  <add key="servicespagedesc" value="TODO: Edit this default message" />
  <add key="contactspagedesc" value="TODO: Edit this default message" />
  <add key="aboutpagedesc" value="TODO: Edit this default message" />
  <add key="homepagedesc" value="TODO: Edit this default message" />
 </appSettings>

たとえば、実行時に "homepagedesc"キーを変更したいとしましょう。 私は、ConfigurationManagerとWebConfigurationManagerの静的クラスを試しましたが、設定は "読み取り専用"です。 実行時にappSettingsの値を変更するにはどうすればよいですか?

更新:さて、私は5年後です。 Web.configファイルでは、実行時に意図的に編集できる設定を置いてはならないが、その代わりに、ユーザが以下にコメントしたものと同じXMLファイルを別のXMLファイルに入れるべきだと私は指摘したい。 これによりweb.configファイルを編集しなくてもアプリケーションを再起動することができ、怒っているユーザーがあなたを呼び出すことになります。


WebConfigurationManager.OpenWebConfiguration()を使用する必要がありWebConfigurationManager.OpenWebConfiguration() 。例:

Dim myConfiguration As Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~")
myConfiguration.ConnectionStrings.ConnectionStrings("myDatabaseName").ConnectionString = txtConnectionString.Text
myConfiguration.AppSettings.Settings.Item("myKey").Value = txtmyKey.Text
myConfiguration.Save()

私はあなたもAllowLocationAllowLocationを設定する必要があると思う。 これは、要素を使用して個々のページを構成できるかどうかを示すブール値です。 "allowLocation"がfalseの場合、個々の要素では設定できません。

最後に、IISでアプリケーションを実行し、Visual Studioからテストサンプルを実行すると違いがあります。 ASP.NETプロセスIDは、IISアカウント、ASPNETまたはNETWORK SERVICES(IISバージョンによって異なります)です。

ASPNETまたはNETWORK SERVICESを許可する必要があります。web.configが存在するフォルダのアクセス権を変更します。


2012これは、このシナリオのより良い解決策です( Visual Studio 2008テスト済み):

Configuration config = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
config.AppSettings.Settings.Remove("MyVariable");
config.AppSettings.Settings.Add("MyVariable", "MyValue");
config.Save();

アップデート2018 =>
2015年にテストされた - Asp.net MVC5

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
config.AppSettings.Settings["MyVariable"].Value = "MyValue";
config.Save();

要素が存在するかどうかチェックする必要がある場合は、次のコードを使用します。

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
if (config.AppSettings.Settings["MyVariable"] != null)
{
config.AppSettings.Settings["MyVariable"].Value = "MyValue";
}
else { config.AppSettings.Settings.Add("MyVariable", "MyValue"); }
config.Save();

また、アプリケーションの再起動を避けたい場合は、 appSettingsセクションを移動することができます:

<appSettings configSource="Config\appSettings.config"/>

別のファイルにコピーします。 また、 ConfigurationSaveMode.Minimalと組み合わせて

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
config.Save(ConfigurationSaveMode.Minimal);

通常のappSettingsセクションとは異なる形式のファイルを使用する必要なく、アプリケーションの再起動を引き起こすことなく、さまざまな設定のストアとしてappSettingsセクションを引き続き使用できます。


一般にweb.configを変更すると、アプリケーションが再起動します。

アプリケーションで実際に独自の設定を編集する必要がある場合は、設定をデータベース化するか、編集可能な設定でxmlファイルを作成するなど、別の方法を検討する必要があります。


誰がポイントに直接好きですか、

あなたの設定で

    <appSettings>

    <add key="Conf_id" value="71" />

  </appSettings>

あなたのコードでは(C#)

///SET
    ConfigurationManager.AppSettings.Set("Conf_id", "whateveryourvalue");
      ///GET              
    string conf = ConfigurationManager.AppSettings.Get("Conf_id").ToString();




runtime