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

5
由于.NET标准中不存在ConfigurationManager,因此在.NET标准类库中检索应用程序设置的最佳方法是什么?不管是web.config还是appSettings.{env}.json,我们有三个项目: ASP.NET Core Web App (1.1),ASP.NET Web App (4.6.1 )和.NET Standard Class Library (1.4),后者被两个项目引用。
在.NET Standard类库中,我们有一个URL需要根据部署环境进行更改。对于.NET Core应用程序,这很好处理,我们只需将URL添加到相应的appSettings.{env}.json文件中,向DI容器添加适当的值,然后使用Microsoft.Extensions.Options库检索配置。但是,我们还需要从.NET Framework 4.6.1应用程序调用该库,但由于没有方法(至少我找不到)来从web.config文件中检索值,因此我们没有好的方法在类库中设置URL。目前,我们通过使URL变量静态并从每个.NET Framework项目的Application_Start()方法中设置其值来解决此问题,我们通过添加到每个web.config的appSetting键来确定它是哪个环境,然后根据环境手动设置URL。
是否有更强大的方式在.NET Standard类库中检索.NET Core和.NET Framework应用程序的appSettings值? 最好在类库内设定该值。

1
谢谢你对一个完全合理的问题进行随意的负评? - Levi Fuller
1个回答

2

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

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


这已经是我们目前的做法了 - 在 Global.asax.cs 中,我们根据每个使用它的 .NET Framework 项目中的配置调用 SetClientUrl(string clientApiUrl) 方法。我希望有一种更可扩展的方式。我们的库是基于 Swagger API 生成的,并且根据部署到哪个服务器需要不同的 IP 地址,所以我们没有选择。如果所有项目都是 .NET Core 或所有项目都是 .NET Framework,那么完全可以实现,因此我认为在 .NET Standard 中应该有某种方法可以实现这一点。 - Levi Fuller
1
看起来你正在做正确的事情,但我认为可以考虑是否有一种强制使用的方法。例如,通过构造函数参数实现。没有具体情况很难说。 (顺便说一下,这不是我的反对票,我认为这是一个好问题。) - Matt Johnson-Pint
我觉得那不是你;一般来说,那些给问题投反对票的人也不会花时间来回答问题 :) 好的 - 那么似乎目前在.NET标准项目中无法同时从web.configappSettings.json检索appSettings。感谢您的回答。 - Levi Fuller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接