如何通过在生产中向app.config添加变量来更改(或覆盖)settings.settings变量?
无论如何这可能吗?
答案 0 :(得分:7)
您必须直接引用您尝试覆盖的applicationSettings并明确指定具有替换值的属性。
<configuration>
<!-- section definitions for all elements in <configuration> tag -->
<configSections>
<!-- section group, meaning: there will be a <applicationSettings> tag in you configuration-->
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<!-- defines that there will be a <appname.Properties.Settings> tag inside your <applicationSettings> tag -->
<section name="appname.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<appname.Properties.Settings>
<!-- name of the property you want to override -->
<setting name="setting1" serializeAs="String">
<!-- new value -->
<value>new string value</value>
</setting>
</appname.Properties.Settings>
</applicationSettings>
</configuration>
答案 1 :(得分:1)
对于应用程序范围连接字符串值:
<connectionStrings>
<add name="appname.Properties.Settings.setting1" connectionString="test string" providerName="dbProvider"/>
</connectionStrings>
答案 2 :(得分:0)
这取决于设置的范围。如果其应用程序范围设置在app.config中更改其值就足够了。
但是,如果是用户范围设置,那么app.config中存在的值只是新用户使用的默认值,并且已经使用该应用程序的每个用户都将当前使用的值存储在单独的文件中,即用户。 config,因此更改app.config中的值对已经运行一次应用程序的用户没有任何影响。
由于这种变化,用户范围设置的值可能是一项麻烦的任务。有关更改用户范围设置的更多信息,请查看以下答案:
答案 3 :(得分:0)
使用不同的配置文件进行制作并为您服务。基本上在生产中你将在RELEASE中编译,所以如果你使用Visual Studio,使用post build事件来复制RELEASE配置文件,以防你准备生产的构建。
我更喜欢这个,而不是从代码中更改它,因为其他人更容易在配置文件中看到差异,然后深入到代码中找到所有{{1东西。
答案 4 :(得分:-1)
仅通过代码:
e.g。
if (bool.Parse(ConfigurationManager.AppSettings["overridethis"].ToString()))
{
//use overridden value
}
但是,如果您的问题是在不同的环境中维护不同的配置值,那么我会使用AppSettings。
然后,您可以使用开发人员覆盖文件。
<appSettings file="..\user.config">
请参阅http://www.compiledthoughts.com/2005/03/overriding-webconfig-app-settings-with.html