如何阻止.Net查找我的可执行文件的.config文件

时间:2014-01-27 16:32:04

标签: c# .net config

我有一个名为 parser.exe 的程序,它使用名为 parser.config 的配置文件(txt格式;我用streamreader读取它)。出于某些原因,C#抱怨并且不喜欢这个。

  

未处理的例外情况:   System.Configuration.ConfigurationErrorsException:配置   系统无法初始化--->   System.Configuration.ConfigurationErrors

但是我创建了一个名为 parser.exe.config 的文件。只需跟随内容应用程序运行良好:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

为什么会发生这种情况以及如何在没有parser.exe.config并将配置名称从parser.config更改为parser.exe.config的情况下抑制此问题?

2 个答案:

答案 0 :(得分:3)

  

它使用一个名为parser.config的配置文件(一种txt格式;我用streamreader读取它)

没有必要这样做。 .NET已经为application configuration files提供了一个非常好的框架。只需在项目中添加app.config文件,Visual Studio将在您构建时自动创建parser.exe.config文件。
然后,您可以使用ConfigurationSettings.AppSettings字典来读取单个配置项 - 或者使用更复杂的结构化来处理更复杂的配置。

要为配置部分使用外部配置文件,只需使用configSource中的app.config属性:

<configuration>
  <appSettings configSource="parser.config" />
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

parser.config

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
  <add key="Test" value="This is a test"/>
</appSettings>
  

为什么会这样?

这就是框架的设计方式 - 它默认会查找{可执行文件名} .config文件 - 您可以添加外部配置文件,如上所述,但我无法知道让框架默认查找不同的文件名。

可以将新文件加载到单独的配置对象中:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"parser.config";
var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

但是你必须使用config实例来访问配置设置:

Console.WriteLine(config.AppSettings.Settings["test"].Value);

而不是

Console.WriteLine(ConfigurationManager.AppSettings["test"]);

但这似乎还有很长的路要走,以避免默认的配置文件名。

答案 1 :(得分:1)

您可以告诉.NET在另一个文件中查找您的设置,如下所示:

<configuration>
    <appSettings file="parser.config"></appSettings> 
</configuration>