我有问题。我需要在.Net Core(C#)中编写一个使用app.config的程序:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="custom" type="ConfigurationSample.CustomConfigurationSection, ConfigurationSample"/>
</configSections>
<connectionStrings>
<add name="sampleDatabase" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=SampleDatabase;Integrated Security=True"/>
</connectionStrings>
<appSettings>
<add key="sampleApplication" value="Configuration Sample"/>
</appSettings>
<custom>
<customConfigurations>
<add key="customSample" name="Mickey Mouse" age="83"/>
</customConfigurations>
</custom>
</configuration>
我写道:
string connectionString = ConfigurationManager.ConnectionStrings["sampleDatabase"].ConnectionString;
Console.WriteLine(connectionString);
// read appSettings configuration
string appSettingValue = ConfigurationManager.AppSettings["sampleApplication"];
Console.WriteLine(appSettingValue);
它是来自互联网的例子,所以我认为会起作用,但我得到例外:
System.Configuration.ConfigurationErrorsException: 'Error Initializing the configuration system.'
Inner Exception
TypeLoadException: Could not load type 'System.Configuration.InternalConfigurationHost' from assembly 'CoreCompat.System.Configuration, Version=4.2.3.0, Culture=neutral, PublicKeyToken=null' because the method 'get_bundled_machine_config' has no implementation (no RVA).
我通过NuGet下载 - 安装 - 软件包CoreCompat.System.Configuration -Version 4.2.3-r4 -Pre仍然无法正常工作。也许有人可以帮助我?
答案 0 :(得分:27)
即使在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
。
答案 1 :(得分:20)
您可以将Configuration API与任何 .NET核心应用程序一起使用,而不仅仅是使用ASP.NET核心应用程序。 查看链接中提供的示例,其中显示了如何在控制台应用程序中阅读配置。
在大多数情况下,JSON源(读作.json
文件)是最合适的配置源。
注意:当有人说配置文件应该是
appsettings.json
时,不要感到困惑。您可以使用任何适合您的文件名,文件位置也可能不同 - 没有特定的规则。
但是,由于现实世界很复杂,因此有很多不同的配置提供商:
等等。您甚至可以使用/编写自定义提供程序。
实际上,app.config
配置文件是一个XML文件。因此,您可以使用XML配置提供程序(source on github,nuget link)从中读取设置。但请记住,它仅用作配置源 - 您的应用程序行为应该由您实现。配置提供商不会更改设置&#39;并为您的应用设置政策,但只读取文件中的数据。
答案 2 :(得分:10)
我有一个带有类似问题的.Net Core 3.1 MSTest项目。这篇文章提供了修复它的线索。
将其简化为.Net core 3.1的简单答案:
如果它是MSTest项目:
将项目中的文件重命名为testhost.dll.config
OR
使用DeepSpace101提供的构建后命令
答案 3 :(得分:-3)
要开始使用dotnet核心,SqlServer和EF核心,可以使用下面的DBContextOptionsBuilder,您无需创建App.config文件。不要忘记在下面的代码中更改服务器地址和数据库名称。
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=TestDB;Trusted_Connection=True;");
要使用EF核心SqlServer提供程序并编译上面的代码,请安装EF SqlServer软件包
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
在编译后,运行代码之前,请首先进行以下操作
dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet ef migrations add InitialCreate
dotnet ef database update
运行代码
dotnet run