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



Answers

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

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

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                    .FilePath

根据每个用户的漫游和非漫游配置文件使用不同的ConfigurationUserLevel值。

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

Question

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

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




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




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

问题解决了

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




我看到的另一个选项在此处不存在:

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



Links