NETSDK1152 _ViewImports.cshtml 文件错误

问题描述 投票:0回答:1

将我的 Web 应用程序从 NET5 升级到 NET6 后,当尝试将我的 Web 应用程序推送到 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 后,我开始收到上述错误。

但是,这只发生在我使用发布功能时(或者通过推送到远程 git 存储库来触发 CI/CD 时)。如果我在本地使用 dotnetpublish,一切似乎都可以正常发布。

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

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

asp.net-core msbuild azure-web-app-service .net-6.0 razor-class-library
1个回答
0
投票

来自 Microsoft 文档

如果来自不同源路径的文件被复制到发布输出中的同一文件路径,.NET SDK(6.0.100 预览版 1)会生成新错误 (

NETSDK1152
)。当项目及其项目引用包含与发布输出中包含的同名文件时,可能会发生这种情况。

旧行为

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

在某些情况下,构建会失败。例如,当尝试创建单文件应用程序时,捆绑程序失败并出现 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

© www.soinside.com 2019 - 2024. All rights reserved.