如何获取项目之间共享的app.settings文件的相对文件路径

时间:2017-10-27 16:08:29

标签: c# asp.net visual-studio filepath appsettings

我的解决方案根目录中有一个appsettings.config文件,显示在'解决方案项目'我想在3个不同的项目中引用的文件夹

enter image description here

这3个项目包括以下

  • 网络性能和负载测试项目
  • 单元测试项目(UI自动化测试)
  • 标准类库

我有一个类库项目中配置文件的静态包装器,我打算从其他项目中引用它。

我遇到的问题是获取解决方案根目录的正确相对路径,而不管当时正在运行哪个项目。

这是我的包装类代码....

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>

非常感谢,

1 个答案:

答案 0 :(得分:3)

解决方案1:主要用于开发,它不允许在运行环境中共享配置文件

您可以链接 appsettings.config到每个项目(将项目添加为链接)

然后更改&#34;复制到输出目录&#34;这些链接的属性为&#34;复制如果更新&#34;

enter image description here

在每个项目的配置文件中使用以下内容:

...    
<appSettings configSource="appsettings.config" />
...

更新:

解决方案2:支持在运行环境中共享配置文件

用于在公共场所托管appsettings.config 您也可以在项目的配置文件中使用它:

...
<appSettings file=".\..\..\..\appsettings.config" />
...

绝对路径

...
<appSettings file="C:\tmp\appsettings.config" />
...

您可以通过ConfigurationManager.AppSettings []访问这些设置。加载该文件无需额外的工作。