在您的專案檔中支援多個 .NET Framework 版本
當您第一次建立專案時,我們建議您建立 .NET Standard 類別庫,因為它可為最廣泛的使用專案提供相容性。 根據預設,若使用 .NET Standard,您必須將跨平台支援新增至 .NET 程式庫。 不過,在某些情節下,您可能也需要包含以特定架構為目標的程式碼。 此文章顯示如何針對 SDK 樣式專案執行此作業。
針對 SDK 樣式專案,您可以在專案檔中設定多目標架構 (TFM) 的支援,然後使用 dotnet pack
或 msbuild /t:pack
來建立套件。
注意
nuget.exe CLI 不支援封裝 SDK 樣式專案,因此您應該只使用 dotnet pack
或 msbuild /t:pack
。 我們建議您改為在專案檔中包含通常位於 .nuspec
檔案中的所有屬性。 若要在非 SDK 樣式專案中以多個 .NET Framework 版本為目標,請參閱支援多個 .NET Framework 版本。
建立支援多個 .NET Framework 版本的專案
在 Visual Studio 中建立新 .NET Standard 類別庫,或使用
dotnet new classlib
。我們建議您建立 .NET Standard 類別庫,以獲得最佳相容性。
編輯 .csproj 檔案以支援目標 Framework。 例如,
<TargetFramework>netstandard2.0</TargetFramework>
變更為:
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
請務必將 XML 元素從單數變更為複數 (將 "s" 新增至開頭和結束標籤)。
如果您有任何只能在一個 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 } }
將任何您想要的 NuGet 中繼資料以 MSBuild 屬性新增至 .csproj。
如需可用套件中繼資料與 MSBuild 屬性名稱的清單,請參閱套件目標。 另請參閱控制相依性資產。
如果您想要將組建相關屬性與 NuGet 中繼資料分開,您可以使用不同的
PropertyGroup
,或將 NuGet 屬性放在另一個檔案中,並使用 MSBuild 的Import
指示詞來包含它。 從 MSBuild 15.0 開始也支援Directory.Build.Props
與Directory.Build.Targets
。現在,使用
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>