Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При первом создании проекта рекомендуется создать библиотеку классов .NET Standard, так как она обеспечивает совместимость с самым широким спектром потребляемых проектов. С помощью .NET Standard вы добавляете кроссплатформенную поддержку в библиотеку .NET по умолчанию. Однако в некоторых сценариях может потребоваться также включить код, предназначенный для конкретной платформы. В этой статье показано, как это сделать для проектов в стиле SDK .
Для проектов в стиле SDK можно настроить поддержку нескольких целевых платформ (TFM) в файле проекта, а затем использовать dotnet pack или msbuild /t:pack создать пакет.
Создание проекта, поддерживающего несколько платформ .NET
Создайте новую библиотеку классов .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>
Многоцелевой выбор с повторяющимися платформами
Начиная с NuGet 7.6 / .NET SDK 10.0.300, можно использовать несколько TargetFrameworks значений, разрешающихся в одной базовой платформе. Это позволяет реализовать сценарии, такие как сборка для необходимых сред выполнения или ориентация на несколько версий основного приложения из одного проекта.
Дополнительные сведения о том, как это работает с восстановлением и пакетом, см. в статье "Назначение нескольких платформ".