我的解决方案根目录中有一个appsettings.config文件,显示在'解决方案项目'我想在3个不同的项目中引用的文件夹
这3个项目包括以下
我有一个类库项目中配置文件的静态包装器,我打算从其他项目中引用它。
我遇到的问题是获取解决方案根目录的正确相对路径,而不管当时正在运行哪个项目。
这是我的包装类代码....
public static class TestConfiguration
{
private static Configuration Config { get; }
static TestConfiguration()
{
var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = Path.Combine(@"../../../appsettings.config");
Config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
}
public static string SepaTestDb {
get { return Config.ConnectionStrings.ConnectionStrings["SEPATest"].ConnectionString; }
}
public static string ApiUrl => Config.AppSettings.Settings["apiUrl"].Value;
}
这适用于负载测试项目,但对于我得到的其他人...
System.NullReferenceException occurred
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=SA.SEPA.Web.UI.Selenium.Integration
...当我尝试获取SepaTestDb或ApiUrl属性时,可能是由于未从无效文件路径初始化对象
如何设置相对路径,以便可以从不同的项目访问appsettings.config文件,如果任何项目在构建/云中运行等,将会被选中。
修改
..这是我的appsettings.config文件内容
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="SEPATest" connectionString="Server=[server];Database=SEPA-c7455a3a-86bd-4862-bb25-2b5d17d97f95Test;User Id=[username];Password=[password];" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="apiUrl" value="https://sasepaapi-sasepaapitest.azurewebsites.net/api" />
</appSettings>
</configuration>
非常感谢,
答案 0 :(得分:3)
解决方案1:主要用于开发,它不允许在运行环境中共享配置文件
您可以链接 appsettings.config到每个项目(将项目添加为链接)
然后更改&#34;复制到输出目录&#34;这些链接的属性为&#34;复制如果更新&#34;
在每个项目的配置文件中使用以下内容:
...
<appSettings configSource="appsettings.config" />
...
更新:
解决方案2:支持在运行环境中共享配置文件
用于在公共场所托管appsettings.config 您也可以在项目的配置文件中使用它:
...
<appSettings file=".\..\..\..\appsettings.config" />
...
或
绝对路径
...
<appSettings file="C:\tmp\appsettings.config" />
...
您可以通过ConfigurationManager.AppSettings []访问这些设置。加载该文件无需额外的工作。