繁体   English   中英

创建库.tar Framework 4.5和.Net Standard

[英]Create library targeting .Net Framework 4.5 and .Net Standard

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

(稍后我将在这个库中创建一个NuGet包)

我的问题是:

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

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

    Products.SDK.sln

    • Products.SDK.NetFramework
    • Products.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更好,但我不确定这是正确的方法。

PS:

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

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

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

我的Noda Time项目采用了这种方法,因此我们遇到的问题非常少。

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

  • 公共等级A - 仅限于net45
  • 公共B级 - 仅限于netstandard
  • 公共C级 - 两者兼而有之

如果你有多个其他项目,那么你最后会遇到重大问题。 假设项目X的目标是netstandard1.4并使用B,那么项目Y的目标是net45并使用A - 然后是在.NET 4.7上运行的应用程序Z,并且根据X和Y都会出现问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM