Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查找活动app.config文件的路径?_C#_.net_Nunit_App Config_Configurationmanager - Fatal编程技术网

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

C# 如何查找活动app.config文件的路径?,c#,.net,nunit,app-config,configurationmanager,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

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

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时才会发生。

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

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

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

System.Reflection.Assembly.GetExecutingAssembly().Location

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

试试这个

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

确保单击文件上的属性并将其设置为“始终复制”,否则它将不会与happy lil dll一起位于Debug\文件夹中,以配置它需要的位置并添加更多cowbell严格来说,没有单一的配置文件。除了ASP.NET1之外,可以有三个使用内置(
System.configuration
)支持的配置文件。除了机器配置:
app.exe.config
、用户漫游和用户本地

要获取“全局”配置(exe.config),请执行以下操作:

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



1具有完全不同的模型,其中子文件夹(IIS虚拟或文件系统)
web.config
的内容可以(取决于设置)当我第一次意识到单元测试项目引用了该项目中的app.config,而不是与我的生产代码项目相关联的app.config时,添加或覆盖父级的
web.config

我刚刚在Prod项目的Post-Build事件中添加了一行,它将app.config复制到测试项目的bin文件夹中

问题解决


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

我在一个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中。有趣的地方。

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

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

此外,您可以同时拥有多个“活动”配置文件。Machine.config、framework-level-web.config、app-level-config等。。。因此,我认为没有一种方法可以在不解析应用程序可用的所有可能配置文件的情况下自动定位唯一的连接字符串文件位置。我首先添加了“答案”,这非常有用。但最后我真的需要这种方法,所以也感谢您在这里介绍它。别忘了添加对System.Configuration的引用这比尝试使用Assembly.GetEntryAssembly()+“.config”要好在ASP.NET中的某些情况下以及在使用AppDomains时的某些情况下,此选项不起作用。如何更改此路径?谢谢。我有一个从VS2008->VS2013升级的项目,它拒绝读取app.config文件。然后我通过AppDomain.CurrentDomain.SetupInformation.ConfigurationFile了解到它正在搜索未生成的XXX.vshost.exe.config。所以我在项目属性调试选项卡中关闭了它。然后我不得不将我的app.config文件重命名为{projectName}.config,将其放入bin文件夹,最后它终于起作用了。然而,关于.net内核呢?建议使用@Cedric Rup中的“AppDomain.CurrentDomain.SetupInformation.ConfigurationFile”,否则,在ASP.net中的某些情况下以及在使用AppDomains时,您会遇到异常。尽管看起来很粗糙,但它的优点是它是在.net标准2.0下编译的。它在.NETCore2.0下返回null,但在迁移过程中非常有用。
const string APP_CONFIG_FILE = "APP_CONFIG_FILE";
string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);