如何在 .NET Framework、.NET Standard 和 .NET Core 项目之间使用相同的配置?

How to use use same configuration between .NET Framework, .NET Standard, and .NET Core project?

由于 .NET Standard 中不存在 ConfigurationManager,检索执行程序集的应用程序设置的最佳方法是什么,无论是 web.config 还是 appSettings.{env}.json,在 .NET 标准 class 库中?

我们有三个项目:

在 .NET Standard class 库中,我们有一个 URL 需要根据其部署到的环境进行更改。

这对于 .NET Core 应用来说很好,我们只需将 URL 添加到适当的 appSettings.{env}.json 文件,将适当的值添加到 DI 容器,然后使用 Microsoft.Extensions.Options 库来检索配置。

但是,我们还需要从我们的 .NET Framework 4.6.1 应用程序调用该库,但由于没有方法(至少 none 我可以找到)从 web.config 文件,我们没有在 class 库中设置 URL 的好方法。

我们现在通过将 URL 变量设为静态并在我们引用它的每个 .NET Framework 项目的 Application_Start() 方法中设置它的值来解决这个问题,我们确定哪个环境是通过我们添加到每个 web.config 的 appSetting 键,然后根据环境手动设置 URL。

是否有更可靠的方法来处理从 .NET Standard class 库中的 .NET Core 和 .NET Framework 应用程序检索 appSettings 值? 最好我们可以在 class 库中单独设置值。

您应该在调用库之前从配置中读取值,并通过参数将其传递到方法或构造函数中。

一般来说,库代码不应依赖于其宿主环境配置的副作用。这样做会使重用代码或有效测试变得非常困难。