You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

咨询:在Rocky Linux 8上跨编译带Windows依赖的.NET Core应用的解决方案及Windows Desktop workload安装方法

咨询:在Rocky Linux 8上跨编译带Windows依赖的.NET Core应用的解决方案及Windows Desktop workload安装方法

看起来你遇到的问题是Linux上的.NET SDK默认没有包含Windows桌面项目所需的构建组件——毕竟Windows Desktop是Windows专属的SDK部分,Linux环境下不会默认预装。不过别担心,我们可以通过安装跨平台的Windows Desktop workload来解决,完全不需要在Linux上运行Windows程序,只是给SDK补上编译所需的目标文件而已。

解决步骤:

  1. 检查已安装的.NET Workloads
    先确认一下当前你的.NET SDK里有没有预装Windows相关的构建组件,执行这条命令:
    dotnet workload list
    你大概率会看到windowsdesktop相关的条目处于未安装状态,这就是缺失.targets文件的核心原因。

  2. 安装Windows Desktop跨编译Workload
    针对你使用的.NET 8版本,执行以下命令安装所需的workload:
    dotnet workload install windowsdesktop
    如果安装过程中遇到NuGet源访问问题,可以指定官方源参数:
    dotnet workload install windowsdesktop --source https://api.nuget.org/v3/index.json

这个命令会下载并安装编译Windows桌面项目必需的构建目标文件(就是你报错里找不到的Microsoft.NET.Sdk.WindowsDesktop.targets),而且它只会安装编译用的工具链,不会安装Windows运行时,完全符合你只需要编译打包、不需要运行的需求。

  1. 重新执行编译和发布命令
    安装完成后,再运行你之前的编译和发布命令:
    dotnet build Foo.Complete.sln
    dotnet publish Foo.Complete.sln -r win-x64 -c Release --self-contained true
    这次SDK就能找到对应的构建目标文件,顺利完成跨平台编译和打包了。

补充说明

你提到的NuGet依赖问题其实是个误解:Windows Desktop的SDK构建组件不属于普通的项目NuGet依赖,它是.NET SDK的workload范畴——也就是SDK级别的构建工具链,不是项目里引用的类库,所以必须通过dotnet workload install命令来安装,而不是通过NuGet包管理器添加项目依赖。

如果安装时遇到权限问题(比如无法写入SDK目录),可以给命令加上sudo提升权限,或者确保你的用户拥有/usr/lib64/dotnet目录的访问权限。

内容来源于stack exchange

火山引擎 最新活动