我有一个名为FooConsole的.net控制台应用程序。当我构建和部署它时,我看到我项目中的App.config
文件已部署到FooConsole.exe.config
。
如何将.config文件部署到Foo.config
而不是FooConsole.exe.config
,并将其作为默认的.config文件读取?
更新:我意识到这听起来像是一项任意要求。我希望能够编写可以为不同部署复制自定义.config文件的脚本。但是,如果我的.config文件名必须依赖于.exe的名称,那么如果某人(可能)决定更改.exe文件的名称,它将会破坏我的脚本。
从您的回答中,听起来这是一个我只需要解决的问题。
答案 0 :(得分:3)
虽然您无法更改默认配置文件的内容,但您可以告诉此配置文件从其他文件中提取其设置。 e.g。
<configuration>
<appSettings file="MyOther.config"></appSettings>
</configuration>
答案 1 :(得分:2)
更好的问题是:你为什么要这样做?困扰你的默认有什么问题?
也就是说,如果您愿意,可以通过编程方式加载配置文件,并且可以随意命名。 This answer类似的问题链接到您需要知道的所有内容。
答案 2 :(得分:2)
你做不到。 .NET配置系统将始终尝试查找(exe文件名).config - 对于foo.exe
,.NET将始终查找foo.exe.config
。没有切换或设置或改变它的东西。
如果你真的想要偏离这个约定(真的吗?),那么你需要使用System.Configuration命名空间中的Configuration
类来自己动手。
如果你真的必须更改配置名称(再次:真的吗?为什么?),然后使用此代码:
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "Custom.config"; // give it the name you want
Configuration custom =
ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
string value = custom.AppSettings.Settings["key"].Value;
您需要在项目中添加“custom.config”,并确保“如果更新”将其“复制到输出目录”。
这样做 - 你基本上可以加载你想要的任何文件 - 但它仍然是一个kludge ...
答案 3 :(得分:0)
实际上假设您需要一个集中配置 - 解决方案很简单:不要使用默认的配置文件... ...但滚动你自己的机制。读取XML文件并不难。