我有一个名为 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的情况下抑制此问题?
答案 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>