如何find活动的app.config文件的path?

我试图完成这个exception处理程序:

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

尝试这个

 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 

希望能帮助到你

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

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

 ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) .FilePath 

根据使用的漫游和非漫游configuration文件使用不同的ConfigurationUserLevel值。


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

如果你的意思是你在使用NUnit的时候只能得到一个空的返回值,那么你可能需要将你的应用程序的你的app.config的ConnectionString值复制到你的testing库的app.config中。

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

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

 System.Reflection.Assembly.GetExecutingAssembly().Location 

我第一次意识到unit testing项目引用了该项目中的app.config,而不是与我的生产代码项目(偏离课程DOH)相关的app.config,我只是在Prod项目的Post Build Event中添加了一行这将复制app.config到testing项目的bin文件夹。

问题解决了

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

确保您单击文件上的属性,并将其设置为“始终复制”,否则它将不会在Debug \文件夹中,而您的愉快小DLL将configuration它的位置并添加更多cowbell

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

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

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

根据您的configuration文件的位置System.Reflection.Assembly.GetExecutingAssembly().Location可能会做你所需要的。

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

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