首页
/ 掌控多平台构建利器:MSBuild.Sdk.Extras

掌控多平台构建利器:MSBuild.Sdk.Extras

2024-05-20 19:46:04作者:凌朦慧Richard
MSBuildSdkExtras
Extra properties for MSBuild SDK projects

简介

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

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

MSBuildSdkExtras
Extra properties for MSBuild SDK projects
热门项目推荐
相关项目推荐

项目优选

收起
CangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
672
0
RuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
136
18
openHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
12
8
redis-sdk
仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。
Cangjie
322
26
advanced-java
Advanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。
JavaScript
75.83 K
19.04 K
qwerty-learner
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
TSX
15.56 K
1.44 K
Jpom
🚀简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件
Java
1.41 K
292
Yi-Coder
Yi Coder 编程模型,小而强大的编程助手
HTML
30
5
easy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
1.42 K
231
taro
开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/
TypeScript
35.34 K
4.77 K