Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение нескольких платформ .NET в сборке позволяет гарантировать доступность приложения или библиотеки для разных версий или выпусков .NET.
Мультитаргетинг для проектов .NET Core и .NET 5 и более поздних значительно отличается от мультитаргетинга для проектов .NET Framework. См. сравнение между .NET Framework и многонацелевой.NET Core.
Настройка мультитаргетинга .NET
Создайте новую библиотеку классов .NET Standard в Visual Studio или с помощью команды
dotnet new classlib
.Измените файл проекта. Измените файл
.csproj
для поддержки нескольких целевых платформ. Измените элемент<TargetFramework>
на<TargetFrameworks>
и перечислите фреймворки, которые вы хотите поддерживать.<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>netstandard2.0;net45;netcoreapp3.1;net5.0</TargetFrameworks> </PropertyGroup> </Project>
Используйте символы условной компиляции для разделения кода, относящегося к определённой версии.
public string GetFramework() { #if NET45 return ".NET Framework 4.5"; #elif NETSTANDARD2_0 return ".NET Standard 2.0"; #elif NETCOREAPP3_1 return ".NET Core 3.1"; #elif NET5_0 return ".NET 5.0"; #else return "Unknown Framework"; #endif }
Сборка и упаковка. Чтобы создать пакет, используйте команду
dotnet pack
илиMSBuild.exe /t:pack
. Это создаст файл.nupkg
, предназначенный для всех указанных платформ.MSBuild.exe /t:pack MyProject.csproj
Управление зависимостями
При выборе нескольких версий платформы может потребоваться обрабатывать зависимости по-разному для каждой версии. Используйте условные ItemGroup
элементы в файле проекта, чтобы указать зависимости, зависящие от платформы.
<ItemGroup Condition="'$(TargetFramework)' == 'net45'">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="SomeOtherPackage" Version="2.0.0" />
</ItemGroup>
Обработка зависимостей для конкретной версии в проекте .NET включает использование условных PackageReference
элементов в файле проекта. Это позволяет указать разные версии пакета для разных целевых платформ. Вот как это сделать:
Добавление зависимостей для конкретной версии
Изменить файл проекта: откройте файл
.csproj
и добавьте элементы условногоPackageReference
внутри элементаItemGroup
. Таким образом, можно указать различные версии пакета на основе целевой платформы.<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net45;netstandard2.0;netcoreapp3.1;net5.0</TargetFrameworks> </PropertyGroup> <ItemGroup Condition="'$(TargetFramework)' == 'net45'"> <PackageReference Include="SomePackage" Version="1.0.0" /> </ItemGroup> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> <PackageReference Include="SomePackage" Version="2.0.0" /> </ItemGroup> <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'"> <PackageReference Include="SomePackage" Version="3.0.0" /> </ItemGroup> <ItemGroup Condition="'$(TargetFramework)' == 'net5.0'"> <PackageReference Include="SomePackage" Version="4.0.0" /> </ItemGroup> </Project>
использовать интерфейс командной строки. Вы также можете добавить зависимости с помощью .NET CLI. Например, чтобы добавить зависимость для конкретной целевой платформы, можно использовать следующую команду:
dotnet add package SomePackage --version 1.0.0 --framework net45
Управление транзитивными зависимостями
Транзитивные зависимости — это зависимости ваших зависимостей. Важно проверить и управлять ими, чтобы избежать конфликтов и обеспечить совместимость. Команду dotnet list package
можно использовать для просмотра всех зависимостей и их версий.
dotnet list package
Обработка алмазных зависимостей
Зависимости алмазов возникают, когда в дереве зависимостей присутствует несколько версий пакета. NuGet разрешает их, выбрав самую низкую применимую версию. Чтобы избежать проблем, можно указать диапазоны версий или использовать перенаправления привязок в проектах .NET Framework.
<PackageReference Include="ExamplePackage" Version="[1.0,2.0)" />
Следуя этим рекомендациям, вы можете эффективно управлять зависимостями, зависящими от версии, в проектах .NET, обеспечивая совместимость и стабильность в разных целевых платформах. См. Управление зависимостями пакетов в приложениях .NET, Зависимости , и как NuGet разрешает зависимости пакетов .
Сравнение между .NET Framework и .NET Core Multitargeting
Мультитаргетирование для .NET Core (и .NET 5 и более поздних версий) очень отличается от многонацелий для проектов .NET Framework.
Платформа .NET Framework
- Ограниченная многоцелевость: .NET Framework поддерживает многоцелевую поддержку, но она имеет больше ограничений по сравнению с .NET Core. Он может использовать разные версии .NET Framework, но не несколько платформ одновременно. См. мультитаргетинг MSBuild .
- Старый набор инструментов: использует более старый тип мультицелевой обработки с MSBuild, где проект может использовать только одну платформу и один фреймворк одновременно.
.NET Core
-
Advanced Multitargeting: .NET Core поддерживает расширенное многоплатформенное нацеливание, что позволяет одновременно нацеливаться на несколько фреймворков, используя свойство
<TargetFrameworks>
в файле проекта. См. целевые платформы. - современный набор инструментов: использует более новый тип многонацеливания с MSBuild, выполняя несколько сборок для каждой перечисленной целевой платформы.
Связанное содержимое
Заметка
Эта статья была частично создана с помощью искусственного интеллекта. Перед публикацией автор проверил и пересмотрел содержимое по мере необходимости. См. Принципы использования содержимого, созданного СИ, в Microsoft Learn.