在不同于二进制文件的位置访问 App.config
Posted
技术标签:
【中文标题】在不同于二进制文件的位置访问 App.config【英文标题】:Accessing App.config in a location different from the binary 【发布时间】:2010-09-09 17:04:56 【问题描述】:在 .NET Win 控制台应用程序中,我想访问与控制台应用程序二进制文件不同位置的 App.config 文件。例如,C:\bin\Text.exe 如何从 C:\Test.exe.config 中获取其设置?
【问题讨论】:
相关问题:***.com/questions/6150644/… 【参考方案1】:使用以下内容(记得包含 System.Configuration 程序集)
ConfigurationManager.OpenExeConfiguration(exePath)
【讨论】:
【参考方案2】:您可以通过创建一个新的应用域来设置它:
AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ConfigurationFile = fileLocation;
AppDomain add = AppDomain.CreateDomain("myNewAppDomain", securityInfo, domainSetup);
【讨论】:
【参考方案3】:using System.Configuration;
Configuration config =
ConfigurationManager.OpenExeConfiguration("C:\Test.exe");
然后您可以从配置实例访问应用程序设置、连接字符串等。这当然假设配置文件格式正确并且您的应用程序具有对该目录的读取权限。注意路径是 not "C:\Test.exe.config" 该方法查找与您指定的文件关联的配置文件。如果您指定“C:\Test.exe.config”,它将查找“C:\Test.exe.config.config” 有点蹩脚,但我猜是可以理解的。
参考这里:http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openexeconfiguration.aspx
【讨论】:
此方法的一个问题是文件“C:\Test.exe”必须存在,即使它不是有效的可执行文件。 假设你的 app.config 中有你的连接字符串的任何其他东西是你的 bin 吗?比如 EntityFramework 会自动从你的 app.config 中检索你的连接字符串。这里的问题是我如何告诉配置管理器在某个位置查找我的配置。不要从某个位置创建实例并传递它【参考方案4】:看来您可以使用AppDomain.SetData
方法来实现这一点。文档指出:
您不能使用此方法插入或修改系统条目。
无论如何,这样做似乎确实有效。 AppDomain.GetData
方法的文档列出了可用的系统条目,感兴趣的是 "APP_CONFIG_FILE"
条目。
如果我们在使用任何应用程序设置之前设置"APP_CONFIG_FILE"
,我们可以修改app.config
的加载位置。例如:
public class Program
public static void Main()
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Temp\test.config");
//...
我发现此解决方案记录在 this blog 中,更完整的答案(对相关问题)可以在 here 中找到。
【讨论】:
【参考方案5】:AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ConfigurationFile = @"D:\Mine\Company\";
string browserName = ConfigurationManager.AppSettings["browser"];
【讨论】:
以上是关于在不同于二进制文件的位置访问 App.config的主要内容,如果未能解决你的问题,请参考以下文章
在不依赖 app.config 的情况下使用 SOAP Web 服务
VB.Net 如何将 app.config 文件移动到自定义位置