我们有一个基本上具有以下结构的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
似乎不知道Output
或bin
目录是什么。
有什么想法吗?
答案 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文章中所述。