掌控多平台构建利器:MSBuild.Sdk.Extras
简介
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
持续集成源: 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
-
创建新项目:
- .NET Core控制台应用或.NET标准类库。
- 使用已有的SDK风格项目。
- 或者使用项目模板,可以从仓库的TestProjects目录导入。
-
将顶级
Sdk
属性中的Microsoft.NET.Sdk
替换为MSBuild.Sdk.Extras
。 -
告诉MSBuild从NuGet解析
Sdk
,方法如下:- 添加一个包含Sdk名称和版本的
global.json
文件。 - 或者在
Sdk
属性值后附加版本信息。
- 添加一个包含Sdk名称和版本的
-
修改
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的包
需完成以下步骤:
- 即使你仅构建单个目标框架,也要使用
TargetFrameworks
而非TargetFramework
,以利用其循环能力。 - 设置
RuntimeIdentifiers
属性,填充有效的RID(参见官方文档,完整列表在此处),用分号隔开。 - 对于你想单独构建的TFM,将
ExtrasBuildEachRuntimeIdentifier
属性设置为true
。
完成后,可以执行 build/pack
来构建项目并创建NuGet包。
特点
- 自动管理UWP、Tizen等元包,无需手动添加。
- 提供预处理器符号,方便在构建时根据不同的RID调整代码。
- 支持创建按RID的NuGet包,便于跨平台部署。
- 兼容复杂的库项目结构,包括创建引用集和独立运行时依赖项。
- 容易地自定义输出包内资源路径。
要开始使用MSBuild.Sdk.Extras,只需要按照上述指南进行简单的配置,即可开启高效且整洁的多目标构建之旅。无论是大型企业级项目还是个人开发,这都是一款不容错过的工具。立即尝试,体验它的强大功能吧!
- CangjieCommunity为仓颉编程语言开发者打造活跃、开放、高质量的社区环境Markdown00
- redis-sdk仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。Cangjie032
- 每日精选项目🔥🔥 推荐每日行业内最新、增长最快的项目,快速了解行业最新热门项目动态~ 🔥🔥02
- qwerty-learner为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workersTSX022
- Yi-CoderYi Coder 编程模型,小而强大的编程助手HTML07
- advanced-javaAdvanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。JavaScript085
- taro开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/TypeScript09
- CommunityCangjie-TPC(Third Party Components)仓颉编程语言三方库社区资源汇总05
- Bbrew🍺 The missing package manager for macOS (or Linux)Ruby01
- byzer-langByzer(以前的 MLSQL):一种用于数据管道、分析和人工智能的低代码开源编程语言。Scala04