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

oprakyz7  于 2023-10-21  发布在  .NET
关注(0)|答案(8)|浏览(145)

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

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

gupuwyp2

gupuwyp21#

对于.Net Framework,请尝试以下操作

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

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

bybem2ql

bybem2ql2#

严格地说,没有单一的配置文件。不包括ASP.NET1,可以有三个使用内置(System.Configuration)支持的配置文件。除了机器配置之外:app.exe.config、用户漫游和用户本地。
获取“全局”配置(exe.config):

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                    .FilePath

对每次使用的漫游和非漫游配置文件使用不同的ConfigurationUserLevel值。
1它有一个完全不同的模型,其中子文件夹(IIS虚拟或文件系统)web.config的内容可以(取决于设置)添加到或覆盖父文件夹的web.config

ukqbszuj

ukqbszuj3#

如果你的意思是当你使用NUnit时你只得到一个null返回,那么你可能需要将你的应用程序的app.config中的ConnectionString值复制到你的测试库的app.config中。
当它由测试加载器运行时,测试程序集在运行时加载,并将在其自己的app.config(在编译时重命名为testAssembly.dll.config)中查找,而不是在应用程序配置文件中查找。
若要获取正在运行的程序集的位置,请尝试

System.Reflection.Assembly.GetExecutingAssembly().Location
mv1qrgav

mv1qrgav4#

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

m2xkgtsf

m2xkgtsf5#

当我第一次意识到单元测试项目引用了该项目中的app.config而不是与我的生产代码项目(当然,DOH)相关联的app.config时,我只是在Prod项目的Post Build Event中添加了一行,它将把app.config复制到测试项目的bin文件夹中。
问题解决了
到目前为止,我还没有注意到任何奇怪的副作用,但我不确定这是正确的解决方案,但至少它似乎有效。

fnatzsnv

fnatzsnv6#

我看到的另一个选项在这里丢失了:

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

hgc7kmma7#

根据您的配置文件的位置,System.Reflection.Assembly.GetExecutingAssembly().Location可能会满足您的需要。

ozxc1zmp

ozxc1zmp8#

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

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

配置文件原来位于C:\Program Files\IIS Express\MyScript.dll. exe中。有趣的地方。

相关问题