我们有.NET Framework .dll
我们正在移植到.NET Core
。目前,我们继承自ConfigurationElement
的{{1}}和ConfigurationSection
以在System.Configuration
(或其.NET Core等效版本)中创建自定义配置部分
问题:
.NET Core方式似乎是app.config
。那是对的吗?因为它位于Microsoft.Extensions.Configuration
的{{3}}而不是ASP.NET Core
的{{3}}。我们没有ASP部件。
如果是这样,创建和加载自定义配置部分的任何.NET Core
示例都不依赖于.NET Core
?理想情况下,我们希望直接从文本源(XML或JSON)读取POCO对象图,以获得强类型的好处。
使用.NET Core 2.0,是否会支持传统的startup.cs
和ConfigurationElement
否定开始任何此类移植工作的需要?我问的原因是github project说
.NET Core从.NET Framework获得5,000多个API,作为这项工作的一部分,使其成为一个更广泛的平台。
答案 0 :(得分:6)
我不知道app.config
中的System.Configuration
和.NET Core
支持。可能,不,但这只是猜测。您可以在.NET Core
方法中设置Main
应用程序的配置:
class Program
{
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var poco = new Poco();
configuration.Bind(poco);
Console.WriteLine(poco);
Console.ReadKey();
}
}
class Poco
{
public bool Enabled { get; set; }
public Sort Sort { get; set; }
public override string ToString()
{
return $"Enabled={Enabled}, SortOrder={Sort.Order}";
}
}
class Sort
{
public int Order { get; set; }
}
appsettings.json
正在关注:
{
"enabled": true,
"sort": {
"order": 2
}
}
输出:
Enabled=True, SortOrder=2
您需要引用Microsoft.Extensions.Configuration.Json和Microsoft.Extensions.Configuration.Binder个包。
不依赖于ASP.NET Core
。
Microsoft.Extensions.Configuration
是可扩展的,它可以使用不同的设置提供程序,如环境变量,命令行参数等。因此,可以为ConfigurationSection
实现自定义提供程序 - 如果需要,可以配置。
基于this comment,他们不会将System.Configuration引入NetStandard 2.0。
答案 1 :(得分:2)
除了描述迁移到Microsoft.Extensions.Configuration
(完全有意义)的方式之外,它应该(至少我希望)可以在.NET Core 2上使用System.Configuration
中的相同类型。
核心fx中的System.Configuration
类型:
https://github.com/dotnet/corefx/tree/master/src/System.Configuration.ConfigurationManager
我无法告诉您它们与完整的.NET完全兼容。但至少它是带给我们希望的东西)
因此看起来.NET Core 2将具有旧的System.Configuration
内容而不是netstandard2
。可能是因为MS并不想在其他平台(Xamarin)中分享这些类型。
答案 2 :(得分:2)
随着.NET Standard 2.0版本的尘埃落定,即使在Linux上的.NET Core 2.0中,也可以使用平常的System.Configuration
!
这是一个测试示例:
MyLib.dll
)System.Configuration.ConfigurationManager
v4.4.0。这是必需的,因为元包NetStandard.Library
v2.0.0 ConfigurationSection
或ConfigurationElement
派生的所有C#类都会进入MyLib.dll
。例如,MyClass.cs
派生自ConfigurationSection
,MyAccount.cs
派生自ConfigurationElement
。实施细节不在此范围,但Google is your friend MyApp.dll
)。 .NET Core应用程序以.dll
结束,而不是在Framework中以.exe
结束。app.config
中创建MyApp
。这显然应该与上面#3中的班级设计相匹配。例如:<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="myCustomConfig" type="MyNamespace.MyClass, MyLib" /> </configSections> <myCustomConfig> <myAccount id="007" /> </myCustomConfig> </configuration>
它是 - 你会发现app.config在MyApp
内正确解析,MyLib
中的现有代码运行正常。如果您将平台从Windows(dev)切换到Linux(测试),请不要忘记运行dotnet restore
。