簡體   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