app.config修改值c#

时间:2015-06-04 09:48:03

标签: c# console-application app-config

这里提出的问题是App.Config change value

接受的答案是

string appPath = System.IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly().Location);          
string configFile = System.IO.Path.Combine(appPath, "App.config");

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();         
configFileMap.ExeConfigFilename = configFile;          

System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
config.AppSettings.Settings["YourThing"].Value = "New Value"; 
config.Save(); 

但是当我尝试实现同样的功能时,我发现了一种奇怪的行为。设置值时,上面的答案会抛出NullReferenceExceptionconfig.AppSettings.Settings计数为零。

所以我将configFile路径设置为项目

中的app.config路径
string configFile = @"D:\App\Schedule\Schedule\App.config";

这会修改项目中的app.config以及<<在bin / debug中的appname>> .exe.config。但我不认为这是一个可行的解决方案,因为应用程序可以部署在任何路径上。所以对configPath进行硬编码是行不通的。

然后我再次将configFile修改为给定的

string configFile = System.IO.Path.Combine(appPath, "<appname>.exe.config");

上述代码仅运行并修改&lt;&lt; appname&gt;&gt; .exe.config而不是项目中的app.config。

我真的不确定哪个是正确的,或者我遗漏了任何东西。

我在VS 2012,c#4.5,它是控制台应用程序。截至目前,我的控制台中没有其他代码,app.config是

<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <appSettings>
        <add key="YourThing" value="" />
    </appSettings>
</configuration>

2 个答案:

答案 0 :(得分:1)

这只是对app.config的错误理解。 您希望应用程序修改您的源代码是不正确的。

运行程序时,会在bin / debug或bin / release文件夹中创建app.config的副本。

你的第二个解决方案没问题。应用程序按预期工作。

答案 1 :(得分:0)

  
Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
            config.AppSettings.Settings["PresentationFolder"].Value = path;
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");

其中:path - 是“新值”,“appSettings” - 是App.config中的部分