共用方式為


在專案檔中支援多個 .NET Framework 版本

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

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

備註

nuget.exe CLI 不支援打包 SDK 樣式的項目,因此您應該只使用 dotnet pack or msbuild /t:pack。 建議您改為在專案檔中包含檔案中通常存在.nuspec。 若要以非 SDK 樣式專案中的多個 .NET Framework 版本為目標,請參閱 支援多個 .NET Framework 版本

建立支援多個 .NET Framework 版本的專案

  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>

另請參閱