我有一个面向 .NET 6.0 的普通 .csproj C# 项目,我正在尝试简化为 win-x64 和 linux-x64 运行时构建和发布它的过程。为了避免两次构建项目,我使用带有 /p:NoBuild=true 标志的 MSBuild.exe。但是,我遇到以下错误:
C:\Program Files\dotnet\sdk\7.0.401\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(296,5): error MSB3030: Could not copy the file C:\Users\john.doe\source\repos\ConsoleApp9\ConsoleApp9\obj\x64\Release\apphost" because it was not found.
这是我正在使用的命令:
dotnet build -c Release
win-x64
:发布
/p:NoBuild=true
MSBuild.exe ConsoleApp9.csproj /p:Platform=x64 /p:TargetFramework=net6.0 /p:Configuration=Release /t:publish /p:NoBuild=true /p:RuntimeIdentifier=win-x64
MSBuild.exe
运行相同的 linux-x64
命令,但失败并出现上述错误。我注意到在 linux-x64
目标的构建过程中,apphost 文件没有在 obj 目录中生成,而 apphost.exe
是为 Windows 生成的。 win-x64
选项的 MSBuild.exe 成功发布针对 linux-x64
和 /p:NoBuild=true
运行时的项目,同时确保在构建过程中为 linux-x64
目标生成 apphost?MSBuild.exe ConsoleApp9.csproj /p:Platform=x64 /p:TargetFramework=net6.0 /p:Configuration=Release /t:publish /p:NoBuild=true /p:RuntimeIdentifier=linux-x64
我相信这应该是可能的,因为 Visual Studio 已经可以做到这一点(见底部,它说 1 个项目是最新的):
看看这些命令,这些命令在我这边工作得很好:
MSBuild.exe ConsoleApp9.csproj /t:Restore /p:RuntimeIdentifier=linux-x64
MSBuild.exe ConsoleApp9.csproj /p:Platform=x64 /p:TargetFramework=net6.0 /p:Configuration=Release /t:publish /p:NoBuild=true /p:RuntimeIdentifier=linux-x64
如果仍然不起作用,请分享有关您的项目的更多信息(最小的重现示例即可,例如 .csproj 文件)。