Ubuntu23.04下.NET7.0.105编译报错:缺少Microsoft.NET.Sdk.WindowsDesktop
解决.NET 7在Ubuntu编译时MSB4019找不到WindowsDesktop.targets的问题
先明确问题根源:
你的项目虽声明使用Microsoft.NET.Sdk,但内部大概率包含了WPF或WinForms这类Windows桌面专属的代码/引用。.NET 7开始,WindowsDesktop SDK已整合进主SDK,但Linux环境默认不预装桌面相关构建组件,且这些组件仅支持构建,无法在Linux上运行Windows桌面应用。分场景给出解决方法:
如果是跨平台项目:
检查项目代码和.csproj文件,删除所有WPF/WinForms相关的引用、XAML文件或桌面专属API调用,确保项目仅依赖跨平台的.NET组件。如果确实需要编译Windows桌面项目(最终部署到Windows):
方案一:修改项目文件
将目标框架改为Windows专属的net7.0-windows,并显式启用对应桌面框架:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net7.0-windows</TargetFramework> <!-- 根据项目类型二选一 --> <UseWPF>true</UseWPF> <!-- WPF项目用此行 --> <!-- <UseWindowsForms>true</UseWindowsForms> <!-- WinForms项目用此行 --> </PropertyGroup> </Project>修改后SDK会自动识别并加载所需的桌面构建目标,无需手动引用旧版WindowsDesktop SDK。
方案二:安装Linux上的.NET桌面构建组件
执行以下命令安装桌面相关SDK包:sudo apt update sudo apt install dotnet-desktop-7.0安装完成后重新执行
dotnet build 'appname'.csproj即可。
清理过时配置:
检查项目文件中是否存在类似<Import Project="Sdk\Microsoft.NET.Sdk.WindowsDesktop" />的旧语句,直接删除这类过时配置。
内容的提问来源于stack exchange,提问作者ReinW
相关产品推荐
相关产品推荐

