掌控多平台构建利器: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,只需要按照上述指南进行简单的配置,即可开启高效且整洁的多目标构建之旅。无论是大型企业级项目还是个人开发,这都是一款不容错过的工具。立即尝试,体验它的强大功能吧!
AutoGLM-Phone-9BAutoGLM-Phone-9B是基于AutoGLM构建的移动智能助手框架,依托多模态感知理解手机屏幕并执行自动化操作。Jinja00
Kimi-K2-ThinkingKimi K2 Thinking 是最新、性能最强的开源思维模型。从 Kimi K2 开始,我们将其打造为能够逐步推理并动态调用工具的思维智能体。通过显著提升多步推理深度,并在 200–300 次连续调用中保持稳定的工具使用能力,它在 Humanity's Last Exam (HLE)、BrowseComp 等基准测试中树立了新的技术标杆。同时,K2 Thinking 是原生 INT4 量化模型,具备 256k 上下文窗口,实现了推理延迟和 GPU 内存占用的无损降低。Python00
HunyuanOCRHunyuanOCR 是基于混元原生多模态架构打造的领先端到端 OCR 专家级视觉语言模型。它采用仅 10 亿参数的轻量化设计,在业界多项基准测试中取得了当前最佳性能。该模型不仅精通复杂多语言文档解析,还在文本检测与识别、开放域信息抽取、视频字幕提取及图片翻译等实际应用场景中表现卓越。00
GLM-ASR-Nano-2512GLM-ASR-Nano-2512 是一款稳健的开源语音识别模型,参数规模为 15 亿。该模型专为应对真实场景的复杂性而设计,在保持紧凑体量的同时,多项基准测试表现优于 OpenAI Whisper V3。Python00
Spark-Formalizer-X1-7BSpark-Formalizer 是由科大讯飞团队开发的专用大型语言模型,专注于数学自动形式化任务。该模型擅长将自然语言数学问题转化为精确的 Lean4 形式化语句,在形式化语句生成方面达到了业界领先水平。Python00