【发布时间】:2021-10-25 14:02:45
【问题描述】:
我有一个 .NET Framework 控制台应用程序正在尝试更新到 .NET 5,但它在某些需要来自 app.config 的数据的点上失败了。
关于配置如何工作的relevantdocumentation 现在将其所有示例作为控制台应用程序非常有帮助...直到您真正查看示例,这些示例完全没有帮助。它们都基于Main 块,如下所示:
static async Task Main(string[] args)
{
using IHost host = CreateHostBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
}
控制台应用程序不是 WinForms 应用程序。应用程序代码不会在 Main 中“启动”; Main 是您程序的主体,这意味着将使配置实际工作的行放在方法的末尾意味着在程序准备终止之前它永远不会被命中!
我错过了什么?这些文档示例似乎完全没有意义。我不想托管任何服务;我只希望我现有的app.config 在启动时被读取并提供给配置系统,就像它过去在.NET Framework 中工作的方式一样。恢复旧行为的正确方法是什么?
【问题讨论】:
-
@zaitsman 是的,怎么样?
-
我会说这些只是示例。如果您不托管任何服务,则无需使用
HostBuilder。只需按照@zaitsman 的建议获取appsettings,然后执行您的代码。 -
@smoksnes 获取什么应用设置?我什么都没拿。我有一个第三方依赖项 (linq2db),它期望配置信息就在那里,但它不起作用。如何恢复以前的行为?
-
@MasonWheeler,是的。如果我没记错的话,它取决于
ConfigurationManager。它是/是static,可以在任何地方使用。在 .Net Core(或 .NET5)中,您可以使用ConfigurationBuilder构建您的IConfiguration。然后,您通常将其注册到您的 DI 容器 (ServiceProvider) 并将其注入您需要的地方。然后,取决于您的注册的课程将在需要时注入IConfiguration。和不。这与 .NET Framework 不完全一样。但那是因为 .NET 5 不像 .NET Framework。
标签: c# configuration .net-5