gpt4 book ai didi

c# - 创建针对 .Net Framework 4.5 和 .Net Standard 的库

转载 作者:太空狗 更新时间:2023-10-30 00:29:53 25 4
gpt4 key购买 nike

我有一个 .NET 库 (Products.SDK),我需要让它与 .NET Framework 4.5 和 .NET Standard 1.4 兼容。

(稍后我还将使用该库创建一个 NuGet 包)

我的问题是:

我如何在这个库中编写代码?考虑到两个框架都使用不同的库/依赖项?

  1. 我会在同一个解决方案下有两个独立的项目吗?

    产品.SDK.sln

    • 产品.SDK.NetFramework
    • 产品.SDK.NetStandard
  2. 我是否只有一个项目,并使用 #if 预处理器指令在库中定义不同的类?

    namespace Products.SDK
    {
    #if NETSTANDARD1_3
    public class ProductsApi
    {
    public string ApiUrl { get; set; }
    }
    #else
    public class ProductsApi
    {
    public string ApiUrl { get; set; }
    }
    #endif
    }

如果选项 #1 正确,我如何确保使用相同的名称/命名空间 (Products.SDK) 编译两个项目

我确实认为选项 #2 更好,但我不确定这是正确的方法。

附言:

我在.csproj 文件中指定了目标框架

  <PropertyGroup>
<TargetFrameworks>netstandard1.4;net45</TargetFrameworks>
</PropertyGroup>

最佳答案

您使用选项二 - 但只在您真正需要的地方使用 #if。您给出的示例在两个分支中都有相同的代码。

我的 Noda Time项目正是采用这种方法,因此我们很少遇到问题。

在可能的情况下,让您的代码的公共(public) API 在两个平台上都相同,只有实现细节不同。特别是,如果您确实需要仅在一个平台上公开 API 的某些部分,我希望它只适用于 net45。如果你最终得到这样的结果:

  • 公共(public) A 类 - 仅在 net45 上
  • 公共(public) B 类 - 仅在 netstandard 上
  • 公开课 C - 两者

如果您有多个依赖于此的其他项目,那么您以后将遇到重大问题。假设项目 X 以 netstandard1.4 为目标并使用 B,然后项目 Y 以 net45 为目标并使用 A - 那么在 .NET 4.7 上运行并依赖于 X 和 Y 的应用程序 Z 将出现问题。

绝对值得尝试完全避免条件代码。在许多情况下,您可能会发现虽然有一段稍微简单的代码可以只在 net45 上运行,但仍然有一些代码可以同时在 netstandard net45 上运行。 (回想起来,在 netstandard 上你想使用 TypeInfo 的地方,在 net45 中你可以使用 Type 的地方。你可以使用 TypeInfo 虽然两者都有。)

关于c# - 创建针对 .Net Framework 4.5 和 .Net Standard 的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com