如何在.NET项目中更改默认的.config文件名?

4
我有一个名为FooConsole的.NET控制台应用程序。当我构建和部署它时,我发现项目中的App.config文件被部署到FooConsole.exe.config。
我该如何将.config文件部署到Foo.config而不是FooConsole.exe.config,并仍将其读作默认的.config文件?
更新:我意识到这听起来像是一个任意的要求。我想能够编写脚本,以复制不同部署的自定义.config文件。但是,如果我的.config文件名必须依赖于.exe的名称,那么如果有人(很可能)决定更改.exe文件的名称,它将破坏我的脚本。
根据您的答案,听起来这是一个问题,我只能绕过去解决。
4个回答

3

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”添加到您的项目中,并确保它在需要时被“复制到输出目录”。这样可以起作用-您基本上可以加载任何文件-但仍然有点笨拙。

2
更好的问题是:你为什么想要这样做?默认设置有什么问题困扰着你吗?
话虽如此,如果您愿意,可以通过程序加载配置文件,并且您可以自行命名。类似问题的这个答案链接包含您需要了解的所有内容。

0

实际上,如果您想要一个中央配置,解决方案很简单:不要使用默认的配置文件......而是自己编写机制。读取XML文件并不难。


这听起来不太对!为什么你不想使用一个内置的功能呢?它非常容易使用,同时也很方便。 - tzup
2
因为您可能在同一个文件夹中有20个 .exe 文件,它们都使用相同的设置。将它们维护在20个不同的配置文件中并不是“非常容易和方便”的事情。在每个应用程序中加载“已知配置文件”只需要一行代码,并且可以进行强类型化。并不是所有的应用程序都像 tzup 说的小型网站一样简单。有些应用程序会更加复杂。 - TomTom
+1,不应该被踩...如果它是一个中央配置文件,那么自己编写一个是一种可能的解决方案。 - Robin Day

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接