在Debian上构建运行Windows编写的.NET Core应用遇Exec格式错误
问题根源分析
你遇到的Exec format error核心原因很明确:Microsoft.Net.Compilers 3.5.0是Windows专属的编译器包,它内置的编译工具是Windows平台的二进制可执行文件,在Debian Linux系统上根本无法运行,所以触发了执行格式不兼容的错误。
这个包最初是给旧版Visual Studio用的——用来让老IDE能用上更新的C#/VB编译器,但在跨平台的.NET Core构建场景里,.NET Core SDK本身已经自带了跨平台的编译器,完全不需要依赖这个Windows专属的包。
解决方案
方案1:直接移除Microsoft.Net.Compilers包引用(推荐)
修改你的.csproj文件,删掉以下整个包引用节点即可:
<PackageReference Include="Microsoft.Net.Compilers" Version="3.5.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>
方案2:替换为跨平台的编译器工具包(若需指定编译器版本)
如果你确实需要强制使用特定版本的编译器,可以用跨平台的Microsoft.Net.Compilers.Toolset包替代,修改后的引用如下:
<PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="3.5.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>
验证修复
修改.csproj后,在Debian机器上重新执行以下命令:
dotnet restore dotnet build
这样就能正常完成跨平台构建了。
内容的提问来源于stack exchange,提问作者user13747357
相关产品推荐
相关产品推荐

