关于c#:在不同于二进制文件的位置访问App.config

关于c#:在不同于二进制文件的位置访问App.config

Accessing App.config in a location different from the binary

在.NET Win控制台应用程序中,我想在与控制台应用程序二进制文件不同的位置访问App.config文件。 例如,C: bin Text.exe如何从C: Test.exe.config获取其设置?


1
2
3
4
using System.Configuration;    

Configuration config =
ConfigurationManager.OpenExeConfiguration("C:\Test.exe");

然后,您可以从配置实例访问应用程序设置,连接字符串等。当然,这假设配置文件的格式正确,并且您的应用具有对该目录的读取权限。请注意,该路径不是" C: Test.exe.config"。该方法将查找与您指定的文件关联的配置文件。如果您指定" C: Test.exe.config",它将查找" C: Test.exe.config.config"有点da脚,但是我想这是可以理解的。

此处参考:http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.openexeconfiguration.aspx


看来您可以使用AppDomain.SetData方法来实现此目的。该文档指出:

You cannot insert or modify system entries with this method.

无论如何,这样做确实可行。 AppDomain.GetData方法的文档列出了可用的系统条目,感兴趣的是"APP_CONFIG_FILE"条目。

如果在使用任何应用程序设置之前设置"APP_CONFIG_FILE",我们可以修改从中加载app.config的位置。例如:

1
2
3
4
5
6
7
8
public class Program
{
    public static void Main()
    {
        AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Temp\test.config");
        //...
    }
}

我发现此解决方案已记录在此博客中,并且可以在此处找到更完整的答案(针对相关问题)。


使用以下内容(请记住包括System.Configuration程序集)

1
ConfigurationManager.OpenExeConfiguration(exePath)

您可以通过创建一个新的应用程序域来进行设置:

1
2
3
AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ConfigurationFile = fileLocation;
AppDomain add = AppDomain.CreateDomain("myNewAppDomain", securityInfo, domainSetup);


推荐阅读