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