掌控多平台构建利器: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,只需要按照上述指南进行简单的配置,即可开启高效且整洁的多目标构建之旅。无论是大型企业级项目还是个人开发,这都是一款不容错过的工具。立即尝试,体验它的强大功能吧!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00