Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При первом создании проекта рекомендуется создать библиотеку классов .NET Standard, так как она обеспечивает совместимость с самым широким спектром потребляемых проектов. С помощью .NET Standard вы добавляете кроссплатформенную поддержку в библиотеку .NET по умолчанию. Однако в некоторых сценариях может потребоваться также включить код, предназначенный для конкретной платформы. В этой статье показано, как это сделать для проектов в стиле SDK .
Для проектов в стиле SDK можно настроить поддержку нескольких целевых платформ (TFM) в файле проекта, а затем использовать dotnet pack или msbuild /t:pack создать пакет.
Замечание
nuget.exe CLI не поддерживает проекты в стиле SDK, поэтому следует использовать только dotnet pack или msbuild /t:pack. Рекомендуется включить все свойства, которые обычно находятся в .nuspec файле, в файл проекта вместо этого. Чтобы нацелиться на несколько версий .NET Framework в проекте нестандартного пакета SDK, подробнее см. в разделе «Поддержка нескольких версий .NET Framework».
Создание проекта, поддерживающего несколько версий .NET Framework
Создайте новую библиотеку классов .NET Standard в Visual Studio или используйте
dotnet new classlib.Рекомендуется создать библиотеку классов .NET Standard для обеспечения оптимальной совместимости.
Измените CSPROJ-файл для поддержки целевых платформ. Например, изменение
<TargetFramework>netstandard2.0</TargetFramework>to:
<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 в csproj в качестве свойств MSBuild.
Список доступных метаданных пакета и имен свойств MSBuild см. цель сборки пакета. См. также раздел "Управление ресурсами зависимостей".
Если вы хотите разделить свойства, связанные с процессом сборки, от метаданных NuGet, то можете использовать другое
PropertyGroupили поместить свойства NuGet в другой файл и использовать директиву MSBuildImportдля его включения.Directory.Build.PropsиDirectory.Build.Targetsтакже поддерживаются начиная с MSBuild 15.0.Теперь используйте
dotnet pack, и результирующий .nupkg нацелен на .NET Standard 2.0 и .NET Framework 4.5.
Ниже приведен ФАЙЛ CSPROJ , созданный с помощью предыдущих шагов и пакета SDK для .NET Core 2.2.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
<Description>Sample project that targets multiple TFMs</Description>
</PropertyGroup>
</Project>