代码之家  ›  专栏  ›  技术社区  ›  Steve

命令dotnet publish/test no build。由于x64生成,找不到文件

  •  0
  • Steve  · 技术社区  · 6 年前

    我有一个包含多个项目的解决方案。它们是C/C++、.NETFramework、.Net标准和.NETCARE的混合。以前它只是C/C++和.NETFramework,但现在我们已经升级了大部分。

    我正在尝试使用VST修改一个现有的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> 但我似乎无法指定路径的平台部分。

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

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

    我还尝试在本地运行这些命令,以便更快地转向并使用设置进行播放,但在那里也没有运气。我没主意了。

    编辑:

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

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

    但我不敢相信我需要这么做。这真的是唯一的答案吗?我不能把东西传给 Dotnet发布 让它找对地方?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sander Aernouts    6 年前

    我相信 dotnet publish 简单地调用 MSBuild 用一个 Publish 目标。所以你应该能通过 /p:Platform=x64 which is the syntax to specify the platform for MSBuild .

    来自 dotnet cli git repo : enter image description here