使用 MSBuild.exe 通过 /p:NoBuild=true 发布适用于 Windows 和 Linux x64 的 .NET 6.0 C# 项目时出错

问题描述 投票:0回答:1

我有一个面向 .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.

这是我正在使用的命令:

  1. 首先,我运行常规构建命令:
    dotnet build -c Release
  2. 然后,我尝试使用 MSBuild.exe 和
    win-x64
    :
     发布 
    /p:NoBuild=true
  3. 的项目
MSBuild.exe ConsoleApp9.csproj /p:Platform=x64 /p:TargetFramework=net6.0 /p:Configuration=Release /t:publish /p:NoBuild=true /p:RuntimeIdentifier=win-x64
  1. 最后,我再次对
    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”而不是“dotnetpublish”,因为我引用了一个 C++/CLI 项目。
c# .net visual-studio msbuild msbuild-task
1个回答
0
投票

看看这些命令,这些命令在我这边工作得很好:

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 文件)。

© www.soinside.com 2019 - 2024. All rights reserved.