本文将告诉大家如何修复 dotnet 项目里的多框架 TargetFrameworks 如果包含了当前系统无法支持的平台时,如何进行跳过。解决在 Linux 平台构建时提示 Mac Catalyst 不受支持而构建失败

故事的背景是我期望在 GitHub 的 Action 里面构建一个项目,我期望能够在 Windows 和 Linux 和 Mac 平台上进行构建,一开始 Windows 和 Mac 平台都十分顺利,只是到 Linux 平台时就不断构建失败了

核心构建失败的原因是在 GitHub 的 Action 里面的 Linux 不直接支持 Mac Catalyst 平台,而我在 GitHub 的 Action 里面也不想也不用构建 Mac Catalyst 平台。但可惜的是我的 csproj 里面的 TargetFrameworks 是这样写的

 <TargetFrameworks>net6.0;net6.0-windows;net6.0-maccatalyst</TargetFrameworks>

构建时的核心报错信息如下

MSBuild version 17.9.6+a4ecab324 for .NET
Determining projects to restore...
/usr/share/dotnet/sdk/8.0.202/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.ImportWorkloads.targets(38,5): error NETSDK1178: The project depends on the following workload packs that do not exist in any of the workloads available in this installation: Microsoft.maccatalyst.Sdk.net8

核心错误就是 error NETSDK1178: The project depends on the following workload packs that do not exist in any of the workloads available in this installation: Microsoft.maccatalyst.Sdk.net8

但是我在 Linux 平台只想构建 net6.0 的版本,即使我使用了如下命令行,也依然构建失败

dotnet build -c release -r linux-x64 -p:TargetFramework=net6.0

或者是如下命令也是无效的

dotnet build -c release -r linux-x64 -f net6.0

这可能是因为本质上挂的步骤是在 dotnet restore 还原的步骤里面,在还原步骤时做的是完全的还原,没有受到 dotnet build 的影响。这也就是为什么从 dotnet 的设计上,也提供了 dotnet restore 命令的原因

解决此问题可以使用 dotnet restore 命令,通过 dotnet restore 命令可以做到更细节的控制还原逻辑,避免在还原时读取 TargetFramework 找到不受支持的平台而失败

将以上的构建命令换成以下两句命令即可修复问题

dotnet restore -p:TargetFramework=net6.0
dotnet build -c release -p:TargetFramework=net6.0 --no-restore

以上的 dotnet build 命令里面需要带上 --no-restore 参数,用来表示只构建不还原,这是因为咱在上一句命令里面就自己还原了

通过以上的命令手动设置 TargetFramework 可以避免 dotnet restore 时对整体的框架进行还原,导致遇到不受支持的框架平台返回失败

更进一步可以添加上具体的运行时版本,如在 linux 下只构建 linux 的版本,方法是加上 -r 参数,修改之后的命令行如下

dotnet restore -p:TargetFramework=net6.0 -r linux-x64
dotnet build -c release -r linux-x64 -p:TargetFramework=net6.0 --no-restore

通过以上的构建命令可以更快的完成指定平台构建,且解决包含不受支持的平台构建失败

dotnet 修复多框架 TargetFrameworks 包含不受支持平台导致构建失败的更多相关文章

  1. Windows远程桌面连接 出现身份错误 要求的函数不受支持

    原因 CVE-2018-0886 的 CredSSP 更新 将默认设置从"易受攻击"更改为"缓解"的更新. ## 官方更新 摘要 凭据安全支持提供程序协议 (C ...

  2. 创造DotNet Core轻量级框架【二】

    上一篇 创造DotNet Core轻量级框架[一] 10 题外话 上一篇文章感谢大家提出的各种小建议和各种讨论,但是在写文章的时候框架最最最基础的样子已经做出来了,所以大家的各种建议和意见我会在后续逐 ...

  3. 在不受支持的 Mac 上安装 macOS Monterey 12(OpenCore Patcher)

    一.介绍 本文通用于 macOS Big Sur 和 macOS Monterey,也可以视作笔者 早期文章 的升级版. 这一章节将介绍 macOS Monterey 的系统要求和不受支持的 Mac ...

  4. 在不受支持的 Mac 上安装 macOS Ventura、Monterey、Big Sur (OpenCore Legacy Patcher)

    请访问原文链接:https://sysin.org/blog/install-macos-13-on-unsupported-mac/,查看最新版.原创作品,转载请保留出处. 作者主页:www.sys ...

  5. [IBM][CLI Driver] SQL0270N 函数不受支持(原因码:"75")。 SQLSTATE=42997

    db2 update dbm cfg  using FEDERATED  yes 与 自动维护 (AUTO_MAINT) = ON 自动数据库备份 (AUTO_DB_BACKUP) = OFF 自动表 ...

  6. Win10远程桌面发生身份验证错误,要求的函数不受支持

    昨儿个使用远程桌面,意外发的发现连不上测试环境了.身边的同事也有连不上的.一开始以为是远程机器可能出了问题,但是而后排查确认是自个儿机器问题.原因在与机器前天晚上自动升级了系统补丁,也有部分网友反映了 ...

  7. Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计

    自动化测试如果需要能高效快速的支撑软件项目的测试,项目的快速迭代以及上线,除了以上我们介绍的需要许多的Lib来支持以及需要高效的去编写自动化测试案例外,还需要一个好的自动化测试框架平台来支撑我们的自动 ...

  8. 在不受支持的 Mac 上安装 macOS Monterey 12

    请注意,当前为 Beta 版,后续会及时更新. 请访问原文链接:https://sysin.org/blog/install-macos-12-on-unsupported-mac/,查看最新版.原创 ...

  9. “插件(application/x-vlc-plugin)不受支持”NPAPI和PPAPI的问题

    “插件(application/x-vlc-plugin)不受支持”NPAPI和PPAPI的问题 最近做一个前端的项目,项目需要引用VLC浏览器插件,javascript在IE.Firefox等浏览器 ...

  10. vm 安装 vcenter 本主要记录选择l现有的受支持数据库

    1.将先决条件安装完毕. 安装 .NET3.5 全部下一步记录设置的密码.备忘.

随机推荐

  1. django(cookie与session、中间件、auth模块)

    一 cookie与session 1 发展史及简介 """ 发展史 1.网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的 eg:新闻.博客.文章 2.出现了 ...

  2. Android端Charles抓包

    目录介绍 01.下载安装 02.抓包代理设置 03.抓包Https操作 04.抓包原理介绍 05.抓包数据介绍 06.常见问题总结 07.Android拦截抓包 01.下载安装 下载地址(下载对应的平 ...

  3. 记录--Vue中的$attrs你真的会用吗?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 先来看一个业务需求: 项目经常会遇到产品经理要求你做某组件一样的功能,还要在它的基础上增加东西.如何只用少量代码高效的二次封装组件呢? 例 ...

  4. mybatis调用Oracle存储过程 带游标

    存储过程 CREATE OR REPLACE PROCEDURE proc_test2(p_id IN NUMBER, v_cur OUT SYS_REFCURSOR, p_result_code O ...

  5. FPGA 原语之一位全加器

    FPGA原语之一位全加器 1.实验原理 一位全加器,三个输入,两个输出.进位输出Cout=AB+BC+CA,本位输出S=A异或B异或C.实验中采用三个与门.一个三输入或门(另外一个是两个或门,功能一致 ...

  6. YOLOv4: 虽迟但到,大型调优现场,43mAP/83FPS | 论文速递

    YOLOv4在速度和准确率上都十分优异,作者使用了大量的trick,论文也写得很扎实,在工程还是学术上都有十分重要的意义,既可以学习如何调参,也可以了解目标检测的trick.   来源:晓飞的算法工程 ...

  7. 在idea/webstorm等terminal运行命令报错:Command rejected by the operating system没有权限【已解决】

    在idea/webstorm等编译器terminal窗口运行命令报错:Command rejected by the operating system没有权限[已解决] 1.修改terminal窗口 ...

  8. #根号分治,前缀和,双指针#CF1446D2 Frequency Problem (Hard Version)

    题目 给定一个长度为 \(n\) 的序列,问是否存在一个最长的区间使得至少存在两个众数. 分析 实际上 Easy Version 是用来启发大于根号的做法的. 众数可以说有一个性质吧,答案区间中的其中 ...

  9. 开源LaTex可视化编辑器推荐,支持LaTex代码补全,一键套用模板!

    https://latexlive.com/ 这还是个开源项目,不过是C#的,搭建的成本比较大,没PHP好搞. 下面是这个网站

  10. skywalking入口

    skywalking通过maven配置指定org.apache.skywalking.apm.agent.SkyWalkingAgent为premain-class,该类中包含了一个premain方法 ...