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

问题描述 投票:0回答:8

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

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 时。

c# .net nunit app-config configurationmanager
8个回答
383
投票

对于 .Net Framework,试试这个

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

对于 .Net core 或任何更新的内容,请参阅其他答案。


73
投票

严格来说,没有单一的配置文件。不包括 ASP.NET1,使用内置 (

System.Configuration
) 支持可以有三个配置文件。除了机器配置之外:
app.exe.config
、用户漫游和用户本地。

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

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                    .FilePath

对每次使用的漫游和非漫游配置文件使用不同的

ConfigurationUserLevel
值。


1 具有完全不同的模型,其中子文件夹(IIS 虚拟或文件系统)

web.config
的内容可以(根据设置)添加到或覆盖父文件夹的
web.config


11
投票

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

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

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

System.Reflection.Assembly.GetExecutingAssembly().Location

6
投票

确保单击文件上的属性并将其设置为“始终复制”,否则它将不会与您满意的 lil dll 一起位于 Debug\ 文件夹中,以配置它需要的位置并添加更多牛铃


6
投票

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

问题解决了

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


5
投票

我看到这里缺少另一个选项:

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

3
投票

根据您的配置文件的位置

System.Reflection.Assembly.GetExecutingAssembly().Location
可能会满足您的需要。


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 中。有趣的地方。

© www.soinside.com 2019 - 2024. All rights reserved.