命令dotnet发布/测试无生成。由于x64构建而找不到文件

时间:2018-08-02 14:42:03

标签: .net-core azure-devops

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

我正在尝试使用VSTS修改现有的CI管道,该管道将构建并发布相关项目,因为它们已转换为dotnet core / standard。

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

在测试方面,我无法使用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>指定发布/调试配置,但似乎无法指定路径的平台部分。

为解决此问题,我将配置更改为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以便使其在正确的位置显示吗?

1 个答案:

答案 0 :(得分:1)

我相信dotnet publish只是通过MSBuild目标调用Publish。因此,您应该只可以通过/p:Platform=x64 which is the syntax to specify the platform for MSBuild

dotnet cli git repoenter image description here