2

将我的 WebApp 从 NET5 升级到 NET6 后,尝试将我的 WebApp 推送到 Azure AppService 时,出现 NETSDK1152 错误:

找到多个具有相同相对路径的发布输出文件:C:...\src\ProjA_ViewImports.cshtml、C:...\src\ProjB_ViewImports.cshtml、C:...\src\ProjC_ViewImports.cshtml

问题中的项目是 Razor 类库 (Project Sdk="Microsoft.NET.Sdk.Razor"),它们都被常规 Web 应用程序 () 引用。有问题的文件是 _ViewImport.cshtml 文件,其中包含我的视图的常见使用/导入。它们只有我从未更改过的标准属性(操作 -> 内容,复制到输出目录 -> 不复制)。

在更新到 NET6 之前,无论是在我的本地计算机上还是在 Azure 上(发布和运行应用程序),一切都完美无缺。升级到 .NET6 后,我开始收到上述错误。

但是,这只发生在我使用发布功能时(或者当 CI/CD 被推送到远程 git repo 时)。如果我在本地使用 dotnet publish,一切似乎都可以正常发布。

尝试通常的建议,关闭错误(如建议的,例如,here),并没有为我解决任何问题。

除了完全摆脱 _ViewImport.cshtml 文件或重组项目之外,我不知道如何在保持结构不变的同时潜在地解决这个问题。

4

1 回答 1

0

NETSDK1152如果将来自不同源路径的文件复制到发布输出中的同一文件路径,.NET SDK(6.0.100 预览版 1)会生成一个新错误 ( )。当项目及其项目引用包含发布输出中包含的同名文件时,可能会发生这种情况。

旧行为

两个文件都被复制到同一个目的地。要复制的第二个文件覆盖了第一个文件,而“获胜”的文件大多是任意的。

在某些情况下,构建失败。例如,当尝试创建单文件应用程序时,捆绑器失败并出现 ArgumentException,如以下构建输出所示:

C:\Program Files\dotnet\sdk\5.0.100-preview.5.20258.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(962,5): error MSB4018: The "GenerateBundle" task failed unexpectedly. [C:\repro\repro.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.5.20258.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(962,5): error MSB4018: System.ArgumentException: Invalid input specification: Found multiple entries with the same BundleRelativePath [C:\repro\repro.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.5.20258.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(962,5): error MSB4018: at Microsoft.NET.HostModel.Bundle.Bundler.GenerateBundle(IReadOnlyList`1 fileSpecs) [C:\repro\repro.csproj]

新行为

从 .NET 6 开始,如果源和目标相同,MSBuild 会删除复制到发布文件夹的重复文件。如果有任何剩余的重复, NETSDK1152 则会生成错误并列出重复的文件。

变化的原因

发布输出中的重复文件有时会导致构建中断或不可预测的行为。

建议操作

  • 理想情况下,您应该更新项目以避免将多个同名文件复制到发布输出的情况。错误消息包括重复文件的名称。重复文件的一些原因包括:

    • 一个引用 ASP.NET Core Web 服务的 ASP.NET Core 项目,每个服务都有自己的 appsettings.json 文件。
    • CopyToOutputDirectory 不必要地设置为 的项目项 Always

    二进制日志文件 可用于查找重复文件的原因。

  • 或者,您可以将 ErrorOnDuplicatePublishOutputFiles 属性设置为 false

于 2021-11-27T09:29:20.653 回答