在您的專案檔案中支援多個 .NET 框架

當您第一次建立專案時,建議您建立 .NET Standard 類別庫,因為它提供與最廣泛的取用專案的相容性。 藉由使用 .NET Standard,您可以預設將 跨平臺支援 新增至 .NET 程式庫。 不過,在某些情況下,您可能還需要包含針對特定架構的程式碼。 本文說明如何針對 SDK 樣式 專案執行此操作。

對於 SDK 樣式專案,您可以在專案檔中設定對多個目標架構 (TFM) 的支援,然後使用 dotnet packmsbuild /t:pack 來建立套件。

建立一個支援多個 .NET 框架的專案

  1. 在 Visual Studio 中建立新的 .NET Standard 類別程式庫,或使用 dotnet new classlib

    建議您建立 .NET Standard 類別程式庫,以獲得最佳相容性。

  2. 編輯 .csproj 檔案以支援目標架構。 例如,將

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

    請務必將XML元素從單數變更為複數(將「s」新增至open和close標籤)。

  3. 如果您有任何程式碼只能在一個 TFM 中運作,您可以使用 #if NET45#if NETSTANDARD2_0 來分隔 TFM 相依程式碼。 (如需詳細資訊,請參閱 如何進行多重目標設定。)例如,您可以使用以下程式碼:

    public string Platform {
       get {
    #if NET45
          return ".NET Framework"
    #elif NETSTANDARD2_0
          return ".NET Standard"
    #else
    #error This code block does not match csproj TargetFrameworks list
    #endif
       }
    }
    
  4. 將您想要的任何 NuGet 中繼資料新增至 .csproj 作為 MSBuild 屬性。

    如需可用的套件中繼資料清單和 MSBuild 屬性名稱,請參閱 套件目標。 另請參閱 控制相依性資產

    如果您想要將組建相關屬性與 NuGet 中繼資料分開,您可以使用不同的 PropertyGroup,或將 NuGet 屬性放在另一個檔案中,並使用 MSBuild 的 Import 指示詞來包含它。 Directory.Build.PropsDirectory.Build.Targets 從 MSBuild 15.0 開始也受到支援。

  5. 現在,使用 dotnet pack 和產生的 .nupkg 同時以 .NET Standard 2.0 和 .NET Framework 4.5 為目標。

以下是使用上述步驟和 .NET Core SDK 2.2 產生的 .csproj 檔案。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
    <Description>Sample project that targets multiple TFMs</Description>
  </PropertyGroup>

</Project>

使用重複框架進行多重目標設定

NuGet 7.6 / .NET SDK 10.0.300 開始,你可以使用多個 TargetFrameworks 數值,並解析到相同的底層框架。 這使得像是為多個執行環境建置,或從單一專案針對多個主機應用程式版本等情境。

關於還原與打包的運作方式,請參見「針對多個框架」。

另請參閱