【问题标题】:Publish error: Found multiple publish output files with the same relative path发布错误:发现多个发布输出文件具有相同的相对路径
【发布时间】:2021-12-23 10:18:14
【问题描述】:

当我发布我的 ABP 项目时,我收到以下错误:

C:\Program Files\dotnet\sdk\6.0.100-rc.1.21458.32\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.ConflictResolution.targets(112,5): error NETSDK1152: Found multiple publish output files with the same relative path: 

D:\Github\volo\abp\lepton-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton\compilerconfig.json,
D:\Github\volo\abp\bookstore\src\Acme.BookStore.Theme\compilerconfig.json, 

D:\Github\volo\abp\lepton-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton\package.json, 
D:\Github\volo\abp\bookstore\src\Acme.BookStore.Web\package.json. 

D:\Github\volo\abp\bookstore\src\Acme.BookStore.Web\Acme.BookStore.Web.csproj

【问题讨论】:

    标签: c# azure publish .net-6.0


    【解决方案1】:

    问题:

    .NET 6 迁移后出现此问题。 有一个新功能可以阻止将多个文件复制到具有相同文件名的同一目标目录中。 见https://docs.microsoft.com/en-us/dotnet/core/compatibility/sdk/6.0/duplicate-files-in-output

    解决方案 #1(解决方法):

    您可以将以下构建属性添加到所有可发布 (*.Web) 项目的 *.csproj 文件中。 此属性将绕过此检查并与以前的 .NET5 一样工作。

    <ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
    

    解决方案 #2:

    排除要复制到输出文件夹的有问题的文件。 在本例中,我们将排除以下文件:compilerconfig.json 和 package.json 将以下行添加到您的 common.props(位于解决方案的根目录中)

    <Content Remove="compilerconfig.json;package.json"/>
    <None Include="compilerconfig.json;package.json">
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
    

    【讨论】:

    • 我在将 VS 2022 与 VS 2019 并排安装后遇到了这个问题,即使出现错误的解决方案仍在使用 .NET 5 的 VS 2019 中构建。解决方案 #1 似乎适用于我在短期内 - 谢谢!
    • 是否可以为单个文件覆盖它?如果有项目 B 依赖项目 A 的场景。两者都会发出 appsettings.json。在这种特定情况下,您实际上希望项目 B 覆盖项目 A 中的 appsettings.json。
    • 确认这也是我的问题。由于自动生成的 XML 文档文件 MyApi.xml 被发现重复,Azure Pipelines 自最近一次更新(~2021 年 12 月)以来停止构建。从 .csproj 中删除 Always 部分在我的情况下修复了它。
    【解决方案2】:

    我能够通过在

    此文件位于“\Program Files\dotnet\sdk\6.0.100\Sdks\Microsoft.NET.Sdk\targets”中

    【讨论】:

    • 我不建议这样做 - 您正在更改 .NET 6 SDK 的已安装文件。安装更新版本的 SDK 时,您不仅需要重复此操作。您也很难将其推广给其他开发人员。可以将设置 ErrorOnDuplicatePublishOutputFiles 参数签入存储库,例如作为构建脚本或作为 csproj 文件的一部分。
    【解决方案3】:

    我在一个 Blazor WebAssembly 项目和一个相关的集成测试项目中遇到了这个问题,这两个项目都有 appsettings.json 文件,而我是通过 GitHub 操作退出的 dotnet publish。我发现了另外两种对我有用的方法(以及接受的答案):

    1. 在测试项目中添加&lt;IsPublishable&gt;false&lt;/IsPublishable &gt;
    2. dotnet publish 命令中,直接通过参数指定.csproj

    【讨论】:

      【解决方案4】:

      这是由a breaking change in the .NET 6 SDK 引起的,与您的项目目标的 .NET 版本无关。例如,如果您安装 Visual Studio 2022,它将安装 .NET 6 SDK 并将其用于构建和部署。

      您可以强制 VS 使用较旧的 SDK 工具链,方法是在解决方案根目录中运行 dotnet new globaljson 生成 global.json 文件,然后将 "version" 属性值替换为所需的 SDK 版本(使用 dotnet --list-sdks 列出已安装的版本)。

      我想这意味着如果你有一个项目依赖项 A->B,其中 A 和 B 都是可执行的并且有自己的 appsettings.json,最好将项目 B 拆分为 B1 作为带有 appsettings 的 shell 项目。 json 和 B2 作为具有 B 的所有功能的库。那么依赖 A->B2 和 B1->B2 将避免“多个发布输出文件”的问题。

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 2020-05-12
        • 2011-09-29
        • 1970-01-01
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-07
        相关资源
        最近更新 更多