如何创建同时使用 .NET Framework 和 .NET Core 配置的 NuGet 包?

How can I create a NuGet package that uses both .NET Framework and .NET Core configuration?

提问人:user3012708 提问时间:6/9/2023 最后编辑:Panagiotis Kanavosuser3012708 更新时间:6/9/2023 访问量:82

问:

我正在尝试允许构造函数接受 .Net 的 IConfiguration,以及对 .Net Framework/Standard 的 ConfigurationManager 或类似引用。


我正在尝试为一个类创建一个条件构造函数,该类需要知道它针对哪个运行时运行 - 即它是在框架中还是在 .NET 解决方案中。

此类所在的解决方案是针对 .Net Standard 编写的,但将由 .Net Framework 4.8、.Net Standard 2.0 和 .Net 6/7 应用程序/包使用。

最初我以为条件编译会是答案,以这个为例:

#if NETSTANDARD || NETFRAMEWORK
    //do stuff
#elif NET
    //do different stuff
#endif

但是,这与编译时间无关 - 它将始终编译为 .Net Standard。

有没有办法弄清楚正在使用什么运行时,并以这种方式有条件地呈现构造函数?

我可以只包含所有构造函数并包含关于何时使用什么的注释,但我觉得这将被忽略,如果我能强制正确的用法,它会更简单。

我正在尝试允许构造函数接受 .Net 的 IConfiguration,以及对 .Net Framework/Standard 的 ConfigurationManager 或类似引用。

更糟糕的是 - 我试图在没有不同编译的情况下做到这一点,因为这是我更新的包在 .Net 和 Framework 之间功能不同的唯一实际区域。

C# net-core-configuration Microsoft.Extensions.Configuration

评论

3赞 Panagiotis Kanavos 6/9/2023
你想做什么?没有 .NET Standard 应用程序,这纯粹是一个库目标。正如您所说,这与编译时间无关,因此您不能使用条件编译或其他构造函数。您可以创建一个面向多个运行时的包,但为什么需要在构造函数中执行此操作?
0赞 user3012708 6/9/2023
不好意思!更清楚地说,iI 将 .Net Standard 和 Framework 应用程序混为一谈,因为它们都可以使用 ConfigurationManager。此包也可以由针对 .Net Standard 编写的其他包使用。尽管最终被 .Net 或 Framework 应用程序使用。至于什么 - 我正在尝试改变将配置变量注入构造函数。在一个地方,我将传递 IConfiguration,在另一个地方,我将传递对 ConfigurationManager 的引用。由于 ConfigurationManager 无法在 .Net 上运行,因此我想确保不能使用构造函数等。
0赞 user3012708 6/9/2023
我已经更新了我的帖子以反映我上面的评论。当你把问题包在脑海里时,很容易错过关键的细节,并且不能很好地沟通。
0赞 Panagiotis Kanavos 6/9/2023
Microsoft.Extensions.Configuration是一个 .NET Standard 2 库,可以在 .NET Framework 中使用。有一个兼容包,旨在简化从 .NET Framework 到 .NET Core 的迁移。您不必使用不同的构造函数Sysctem.Configuration.ConfigurationManager
1赞 Panagiotis Kanavos 6/9/2023
你检查过链接的答案吗?您可以将设置加载到 .这根本不是关于构造函数,而是关于处理这两种配置。您认为为此需要不同的构造函数,但事实并非如此。由于一切都在向 ,这是您唯一真正依赖的东西。您还需要一种加载方式app.configMemoryConfigurationSourceIConfigurationapp.config

答: 暂无答案