【问题标题】:Command dotnet publish/test no-build. Cannot find files due to x64 build命令 dotnet publish/test no-build。由于 x64 构建无法找到文件
【发布时间】:2019-01-10 09:19:31
【问题描述】:

我有一个包含多个项目的解决方案。它们是 c/c++、.NET 框架、.NET Standard 和 .NET Core 的混合体。以前它只是 c/c++ 和 .NET 框架,但我们现在已经升级了其中的大部分。

我正在尝试使用 VSTS 修改现有 CI 管道,该管道将构建和发布相关项目,现在它们已转换为 dotnet 核心/标准。

由于项目不兼容,我无法使用 dotnet build 构建此解决方案,因此我改用 Visual Studio 构建任务。效果很好。

在测试方面,我无法使用 Visual Studio 测试任务,因为它失败了。相反,我使用dotnet vstest 并针对已经构建的单元测试项目dll。这不是很好,但它有效。我必须使用--no-build 开关来确保它不会尝试构建项目,因为项目不兼容会导致失败。

对于发布主应用项目,我需要使用dotnet publish。但是,当我这样做时,我会收到类似

的错误
error MSB3030: Could not copy the file "xx\bin\release\netstandard2.0\xx.dll" because it was not found. [xx.csproj]

这是因为它找错了地方。这些文件实际上在 xx\bin\x64\release\netstandard2.0 中。我可以使用dotnet publish -c <release|debug> 指定发布/调试配置,但似乎我无法指定路径的平台部分。

为了解决这个问题,我将配置改为 build 为 xx\bin\release\netstandard2.0\。但是,它仍然失败,出现与 xx\obj\ 路径相关的类似错误。

我尝试在项目文件中将 -r 开关与 RuntimeIdentifiers 结合使用,但这似乎与此问题无关。

我还尝试在本地运行这些命令以更快地转身并使用设置,但那里也没有运气。我没有想法。

编辑:

我有一个(相当不满意的)解决方案。如果我编辑所有项目文件以包含下面的文本,那么文件将输出到预期的位置并且发布将起作用:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <OutputPath>bin\Release</OutputPath>
    <IntermediateOutputPath>obj\Release</IntermediateOutputPath>
  </PropertyGroup>

我不敢相信我需要这样做。这真的是唯一的答案吗?我可以不将某些内容传递给dotnet publish 以使其在正确的位置查找吗?

【问题讨论】:

  • 在 dotnet 发布任务中,如果取消选择 Publish Web Projects 并指定项目路径(或 **/*.csproj)而不是示例 ibb.co/hzoWLe,会怎样?
  • 这就是我正在做的事情。我正在运行的完整命令是: dotnet publish /x.csproj -c release --no-build
  • 你能通过在VSTS中将system.debug变量设置为true来分享详细的构建日志吗?

标签: .net-core azure-devops


【解决方案1】:

我相信dotnet publish 只是用Publish 目标调用MSBuild。所以你应该可以通过/p:Platform=x64which is the syntax to specify the platform for MSBuild

来自dotnet cli git repo

【讨论】:

  • 完美。非常感谢!
  • 随时:)。请记住,由于这只是 MSBuild 的一个包装器,您可以根据需要传递任何 MSBuild 参数,这不仅限于 Platform。
猜你喜欢
  • 2021-02-10
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2018-01-30
  • 2018-02-27
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多