首页 > 其他分享 >dotnet 修复多框架 TargetFrameworks 包含不受支持平台导致构建失败

dotnet 修复多框架 TargetFrameworks 包含不受支持平台导致构建失败

时间:2024-04-25 09:24:23浏览次数:13  
标签:restore 修复 TargetFramework 平台 TargetFrameworks 构建 dotnet net6.0

本文将告诉大家如何修复 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

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

标签:restore,修复,TargetFramework,平台,TargetFrameworks,构建,dotnet,net6.0
From: https://www.cnblogs.com/lindexi/p/18106349

相关文章

  • 记 dotnet 8.0.4 修复的 WPF 的触摸模块安全问题
    本文记录dotnet8.0.4版本修复的WPF的触摸模块安全问题,此问题影响所有的.NET版本,修复方法是更新SDK和运行时宣布安全漏洞地址:https://github.com/dotnet/wpf/issues/9003安全漏洞宣布地址:https://github.com/dotnet/announcements/issues/303漏洞代号:CVE-2024-21409......
  • 修复 Debian 安装 dotnet 失败 depends on ca-certificates
    本文记录我在Debian安装dotnet失败,报错信息是packages-microsoft-proddependsonca-certificates;however:Packageca-certificatesisnotinstalled.一开始按照官方的以下代码例子进行安装packages-microsoft-prod.deb文件,命令如下sudodpkg-ipackages-microsof......
  • .Net WebAPI程序集成CAS单点登录-API方式(不使用DotNetCasClient)
    以下是ashx一般处理程序的示例,且cas登录单独放到了一个按钮中:1、登录按钮(js)- console.log("cos登录");varoriginStr=window.location.origin;window.location.href="https://cas.your.com/cas/login?service="+originStr+"/WebUI/Admin......
  • BenchmarkDotNet
    目录官方开源地址和文档HowitworksChoosingRunStrategy简单使用示例BenchmarkDotNet打印列的含义Benchmark输出列Benchmark特性相关参考版权特别声明官方开源地址和文档GitHub:GitHub-dotnet/BenchmarkDotNet:Powerful.NETlibraryforbenchmarking文档首页:Overview|......
  • 选定进行压缩的卷可能已损坏。请使用chkdsk来修复损坏问题,然后尝试再次压缩该卷
    Windows Server 2008R2环境下,进行磁盘重新分区时,想要对系统盘进行“压缩卷”,结果报错提示“选定进行压缩的卷可能已损坏。请使用Chkdsk来修复损坏问题,然后尝试再次压缩该卷。”这是硬盘出现了坏道导致的,硬盘出错无法压缩扩容,解决方法在报错中已经告诉你,需要使用Chkdsk命令修复。......
  • Edge崩溃(Edge错误代码STATUS_ACCESS_DENIED的修复方法)
    0.问题今天由于在编写自动化脚本,edge浏览器自动填充表单功能十分烦人,会导致测试失败遂在选择每次关闭时清除浏览数据时,全选了所有选项(后来发现实际上只需要删除自动填充表单即可)然后重启edge后,坏事来了,首先旁边提示...扩展出错,请重新加载,而且所有网页(包括setting......
  • centos宝塔面板修复
    CentOS的宝塔面板是一个非常受欢迎的服务器管理工具,它为用户提供了一种简便的方式来管理和配置服务器。然而,有时候宝塔面板会遇到一些问题,需要进行修复。本文将介绍一些常见的修复方法。检查宝塔面板的日志文件:宝塔面板的日志文件存放在/www/server/panel/logs目录下。你可以......
  • vscode remote-x11 ssh 连接时Another All configured authentication methods failed
    错误remote-x11-ssh插件使用ssh2扩展出现以下错误https://github.com/joelspadin/vscode-remote-x11/issues/75Error:Allconfiguredauthenticationmethodsfailed原因https://github.com/mscdex/ssh2/issues/989解决换成ed25519并修改配置......
  • Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具
    TopazPhotoAI3.0.0(macOSUniversal)-AI图片修复工具MaximizeImageQualitywithAI请访问原文链接:TopazPhotoAI3.0.0(macOSUniversal)-AI图片修复工具,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org无耻抄袭者YuTao,请立遁!!!TopazPhotoAI3发......
  • 解决.Net6 部署到ubuntu22.04中使用DotNetCore.NPOI 导出报 Could not open display (
    在Ubuntu22环境下,出现"Couldnotopendisplay(X-Serverrequired.CheckyourDISPLAYenvironmentvariable)"错误可能是由于缺少X服务器或未正确配置DISPLAY环境变量导致的。以下是你可以尝试的解决方法:检查DISPLAY环境变量:确保DISPLAY环境变量已正确设置。使......