首页
/ 掌控多平台构建利器: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,只需要按照上述指南进行简单的配置,即可开启高效且整洁的多目标构建之旅。无论是大型企业级项目还是个人开发,这都是一款不容错过的工具。立即尝试,体验它的强大功能吧!

登录后查看全文
热门项目推荐

热门内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
149
1.95 K
kernelkernel
deepin linux kernel
C
22
6
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
980
395
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
274
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
931
555
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
190
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
75
66
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
65
518
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.11 K
0