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

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

2024-05-20 19:46:04作者:凌朦慧Richard

简介

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

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

热门项目推荐
相关项目推荐

项目优选

收起
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
33
24
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
830
0
redis-sdkredis-sdk
仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。
Cangjie
376
32
advanced-javaadvanced-java
Advanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。
JavaScript
75.92 K
19.09 K
RuoYi-VueRuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
147
26
Yi-CoderYi-Coder
Yi Coder 编程模型,小而强大的编程助手
HTML
57
7
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
19
2
杨帆测试平台杨帆测试平台
扬帆测试平台是一款高效、可靠的自动化测试平台,旨在帮助团队提升测试效率、降低测试成本。该平台包括用例管理、定时任务、执行记录等功能模块,支持多种类型的测试用例,目前支持API(http和grpc协议)、性能、CI调用等功能,并且可定制化,灵活满足不同场景的需求。 其中,支持批量执行、并发执行等高级功能。通过用例设置,可以设置用例的基本信息、运行配置、环境变量等,灵活控制用例的执行。
JavaScript
9
1
qwerty-learnerqwerty-learner
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
TSX
15.62 K
1.45 K
anqicmsanqicms
AnQiCMS 是一款基于Go语言开发,具备高安全性、高性能和易扩展性的企业级内容管理系统。它支持多站点、多语言管理,能够满足全球化跨境运营需求。AnQiCMS 提供灵活的内容发布和模板管理功能,同时,系统内置丰富的利于SEO操作的功能,帮助企业简化运营和内容管理流程。AnQiCMS 将成为您建站的理想选择,在不断变化的市场中保持竞争力。
Go
78
5