访问链接文件配置文件 - 或如何到达输出目录

时间:2017-03-21 13:23:55

标签: configuration asp.net-core .net-core configuration-files

我们有一个基本上具有以下结构的sln

Sln
 |--MyApp.Lib
 |     |-- LotsOfCode
 |--MyApp.Web (old)
 |     |-- SetParameters.DEV.xml
 |     |-- SetParameters.TEST.xml
 |     |-- SetParameters.PROD.xml
 |--MyApp.API (net core)
       |-- appsettings.json
       |-- SetParameters.DEV.xml 
       |-- SetParameters.TEST.xml (link)
       |-- SetParameters.PROD.xml (link)

我们希望重用API项目中的设置文件。我创建了一个可以读取ConfigurationProvider文件的自定义SetParameters,但是当我将文件添加为链接时,我无法让它运行。

问题:当我将文件添加为链接(并设置type=Content)时,它会被复制到输出目录中,我似乎无法找到一种安全的获取方式那个文件。然后IHostinEnvironment似乎不知道Outputbin目录是什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

IHostingEnvironment环境有WebRootPath属性,可用于读取这样的本地文件:

using System.IO;

IHostingEnvironment _env;

var pathToFile = Path.Combine(_env.WebRootPath, "SetParameters.TEST.xml"));
var settings = File.ReadAllLines(pathToFile);

但是,在ASP.NET Core中,您有机会绑定您的设置with ConfigurationBuilder。在给定的文章中,您可以看到JSON文件用法,但是,您也可以使用AddXmlFile。它会像:

var builder = new ConfigurationBuilder()
     // set current output path as root
     .SetBasePath(env.ContentRootPath)
     // EnvironmentName can be DEV, TEST, PROD, etc
     .AddXmlFile($"SetParameters.{env.EnvironmentName}.xml");

IConfigurationRoot configuration = builder.Build();

之后,您可以根据样本xml访问这样的参数:

<parameters>
    <settings>
      <param1 name="Test" value="val" />
    </settings>
</parameters>

// will be "val"
configuration["Parameters:param1:value"]

我找到了关于legacy apps configuration in ASP.NET core的精彩文章。其他选项,更面向对象,是to bind your parameters to a model class,如MSDN文章中所述。