掌控多平台构建利器: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,只需要按照上述指南进行简单的配置,即可开启高效且整洁的多目标构建之旅。无论是大型企业级项目还是个人开发,这都是一款不容错过的工具。立即尝试,体验它的强大功能吧!
ERNIE-4.5-VL-28B-A3B-ThinkingERNIE-4.5-VL-28B-A3B-Thinking 是 ERNIE-4.5-VL-28B-A3B 架构的重大升级,通过中期大规模视觉-语言推理数据训练,显著提升了模型的表征能力和模态对齐,实现了多模态推理能力的突破性飞跃Python00
Kimi-K2-ThinkingKimi K2 Thinking 是最新、性能最强的开源思维模型。从 Kimi K2 开始,我们将其打造为能够逐步推理并动态调用工具的思维智能体。通过显著提升多步推理深度,并在 200–300 次连续调用中保持稳定的工具使用能力,它在 Humanity's Last Exam (HLE)、BrowseComp 等基准测试中树立了新的技术标杆。同时,K2 Thinking 是原生 INT4 量化模型,具备 256k 上下文窗口,实现了推理延迟和 GPU 内存占用的无损降低。Python00
MiniMax-M2MiniMax-M2是MiniMaxAI开源的高效MoE模型,2300亿总参数中仅激活100亿,却在编码和智能体任务上表现卓越。它支持多文件编辑、终端操作和复杂工具链调用Python00
Spark-Prover-X1-7BSpark-Prover 是由科大讯飞团队开发的专用大型语言模型,专为 Lean4 中的自动定理证明而设计。该模型采用创新的三阶段训练策略,显著增强了形式化推理能力,在同等规模的开源模型中实现了最先进的性能。Python00
MiniCPM-V-4_5MiniCPM-V 4.5 是 MiniCPM-V 系列中最新且功能最强的模型。该模型基于 Qwen3-8B 和 SigLIP2-400M 构建,总参数量为 80 亿。与之前的 MiniCPM-V 和 MiniCPM-o 模型相比,它在性能上有显著提升,并引入了新的实用功能Python00
Spark-Formalizer-X1-7BSpark-Formalizer 是由科大讯飞团队开发的专用大型语言模型,专注于数学自动形式化任务。该模型擅长将自然语言数学问题转化为精确的 Lean4 形式化语句,在形式化语句生成方面达到了业界领先水平。Python00
GOT-OCR-2.0-hf阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00