首页
/ 掌控多平台构建利器:MSBuild.Sdk.Extras

掌控多平台构建利器:MSBuild.Sdk.Extras

2024-05-20 19:46:04作者:凌朦慧Richard

简介

MSBuild.Sdk.Extras 是一个扩展了 .NET SDK 风格项目功能的开源库,特别针对那些在官方SDK中尚不可用的特性。这个项目的主要目标是简化多目标框架(Multi-Targeting)的设置,避免在你的 csproj 文件中充斥大量属性配置,保持代码整洁。

更多详细信息,请参考开发者博客

支持的.NET Core SDK版本

请注意,版本3.x的Extras需要.NET 5 SDK或更高版本,但仍然可以构建如 netcoreapp3.1 等早期的目标框架。如果你需要支持SDK 2.x和3.x,可以选择使用2.x版本的 Extras。

高级场景

除了基本的多目标框架支持,MSBuild.Sdk.Extras 还开启了高级图书馆应用场景,包括创建引用集(Reference Assemblies)以及按运行时标识符(Runtime Identifier, RID)分发目标。

引用集

在某些特定场景下,引用集非常有用,例如这篇博客这篇将为你详细介绍其工作原理。

按RID编译

对于涉及本机互操作的项目,可能需要为不同运行时提供不同的实现。通过NuGet,这可以通过runtimes目录和引用集相结合来实现。现在,使用 MSBuild.Sdk.Extras,创建和打包这些变得更加简单。

包名:MSBuild.Sdk.Extras

稳定的版本号:掌控多平台构建利器:MSBuild.Sdk.Extras

持续集成源:掌控多平台构建利器:MSBuild.Sdk.Extras https://pkgs.dev.azure.com/clairernovotny/GitBuilds/_packaging/MSBuildSdkExtras/nuget/v3/index.json

快速入门(VS 15.6+)

从Visual Studio 2017更新6版开始(即v15.6)支持从NuGet解析SDK,这是使用此工具包的先决条件。推荐使用VS 2019。

使用SDK

  1. 创建新项目:

    • .NET Core控制台应用或.NET标准类库。
    • 使用已有的SDK风格项目。
    • 或者使用项目模板,可以从仓库的TestProjects目录导入。
  2. 将顶级Sdk属性中的 Microsoft.NET.Sdk 替换为 MSBuild.Sdk.Extras

  3. 告诉MSBuild从NuGet解析Sdk,方法如下:

    • 添加一个包含Sdk名称和版本的 global.json 文件。
    • 或者在Sdk属性值后附加版本信息。
  4. 修改 TargetFramework 以指定不同的TFM,或者将 TargetFramework 更名为 TargetFrameworks 并用分号隔开列出多个TFM。

最后,你的项目文件应该看起来像这样:

<Project Sdk="MSBuild.Sdk.Extras">
  <PropertyGroup>
    <TargetFrameworks>net46;uap10.0.19041;tizen8.0</TargetFrameworks>
  </PropertyGroup>
</Project>

建议使用.NET 5 SDK,它提供了更全面的桌面工作负载支持。即使是为了构建旧版本的.NET Core,也应使用至少.NET Core 3.1 SDK。你可以使用此版本的SDK来构建旧版本的目标。

重要提示

  • 只有使用桌面版本的MSBuild(比如Visual Studio)并且安装了目标平台SDK,此工具才能正常工作。
  • 如果你在JetBrains Rider上开发,需在设置中指示桌面MSBuild版本(Settings > Build, execution, deployment > Use MSBuild Version)。
  • 在命令行界面中构建时,必须使用MSBuild.exe,因为dotnet build大多数情况下不适用于此类项目。
  • 在Visual Studio Code中可能也能工作,但你需要在launch.json里配置任务以便使用桌面MSBuild进行构建。

更多信息关于如何解析SDK,可以查阅这里

创建按RID的包

需完成以下步骤:

  1. 即使你仅构建单个目标框架,也要使用 TargetFrameworks 而非 TargetFramework ,以利用其循环能力。
  2. 设置 RuntimeIdentifiers 属性,填充有效的RID(参见官方文档,完整列表在此处),用分号隔开。
  3. 对于你想单独构建的TFM,将 ExtrasBuildEachRuntimeIdentifier 属性设置为 true

完成后,可以执行 build/pack 来构建项目并创建NuGet包。

特点

  • 自动管理UWP、Tizen等元包,无需手动添加。
  • 提供预处理器符号,方便在构建时根据不同的RID调整代码。
  • 支持创建按RID的NuGet包,便于跨平台部署。
  • 兼容复杂的库项目结构,包括创建引用集和独立运行时依赖项。
  • 容易地自定义输出包内资源路径。

要开始使用MSBuild.Sdk.Extras,只需要按照上述指南进行简单的配置,即可开启高效且整洁的多目标构建之旅。无论是大型企业级项目还是个人开发,这都是一款不容错过的工具。立即尝试,体验它的强大功能吧!

热门项目推荐
相关项目推荐

项目优选

收起
Python-100-DaysPython-100-Days
Python - 100天从新手到大师
Python
263
51
国产编程语言蓝皮书国产编程语言蓝皮书
《国产编程语言蓝皮书》-编委会工作区
62
16
open-eBackupopen-eBackup
open-eBackup是一款开源备份软件,采用集群高扩展架构,通过应用备份通用框架、并行备份等技术,为主流数据库、虚拟化、文件系统、大数据等应用提供E2E的数据备份、恢复等能力,帮助用户实现关键数据高效保护。
HTML
85
63
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
53
44
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
195
45
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
268
69
xxl-jobxxl-job
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
Java
8
0
RuoYi-VueRuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
171
41
RuoYi-Cloud-Vue3RuoYi-Cloud-Vue3
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
38
24
qwerty-learnerqwerty-learner
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
TSX
332
27