如何查找活动的app.config文件的路径?

时间:2009-04-27 14:08:54

标签: c# .net nunit app-config configurationmanager

我正在尝试完成此异常处理程序:

if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null)
{
    string pathOfActiveConfigFile = ...?
    throw new ConfigurationErrorsException(
       "You either forgot to set the connection string, or " +
       "you're using a unit test framework that looks for  "+
       "the config file in strange places, update this file : " 
       + pathOfActiveConfigFile);
}

当我使用nUnit时,这个问题似乎只发生在我身上。

8 个答案:

答案 0 :(得分:347)

试试这个

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

希望有所帮助

答案 1 :(得分:61)

严格来说,没有单一的配置文件。排除ASP.NET 1 ,可以使用内置(System.Configuration)支持三个配置文件。除了机器配置:app.exe.config,用户漫游和用户本地。

获取“全局”配置( exe .config):

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                    .FilePath

为每次使用的漫游和非漫游配置文件使用不同的ConfigurationUserLevel值。


1 其中有一个完全不同的模型,其中子文件夹(IIS-虚拟或文件系统)web.config的内容可以(取决于设置)添加或覆盖父文件夹web.config

答案 2 :(得分:9)

如果您的意思是在使用NUnit时只获得空返回,那么您可能需要将应用程序的app.config的ConnectionString值复制到测试库的app.config。

当它由测试加载程序运行时,测试程序集在运行时加载并查看它自己的app.config(在编译时重命名为testAssembly.dll.config),而不是你的应用程序配置文件。

要获取正在运行的程序集的位置,请尝试

System.Reflection.Assembly.GetExecutingAssembly().Location

答案 3 :(得分:6)

确保单击文件上的属性并将其设置为“始终复制”,否则它将不会位于Debug \ _文件夹中,您可以使用快乐的lil dll配置它需要的位置并添加更多的cowbell

答案 4 :(得分:6)

我第一次意识到单元测试项目引用了该项目中的app.config而不是与我的生产代码项目关联的app.config(当然,DOH)我刚刚在Post Build事件中添加了一行Prod项目将app.config复制到测试项目的bin文件夹。

问题解决了

到目前为止,我还没有注意到任何奇怪的副作用,但我不确定这是否是正确的解决方案,但至少它似乎有效。

答案 5 :(得分:4)

我看到的另一个选项是:

const string APP_CONFIG_FILE = "APP_CONFIG_FILE";
string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);

答案 6 :(得分:3)

根据配置文件的位置System.Reflection.Assembly.GetExecutingAssembly().Location可能会执行您所需的操作。

答案 7 :(得分:3)

我在Web应用程序中尝试了以前的一个答案(实际上是在本地运行的Azure Web角色),但它并没有完全奏效。但是,这种类似的方法确实有效:

var map = new ExeConfigurationFileMap { ExeConfigFilename = "MyComponent.dll.config" };
var path = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).FilePath;

配置文件原来是在C:\ Program Files \ IIS Express \ MyComponent.dll.config中。有趣的地方。