次の方法で共有


発行出力で重複するファイルのエラーを生成する

異なるソース パスからのファイルが発行出力の同じファイル パスにコピーされる場合、.NET SDK によって新しいエラー (NETSDK1152) が生成されます。 これは、プロジェクトとそのプロジェクト参照に、発行出力に含まれる同じ名前のファイルが含まれている場合に発生することがあります。

導入されたバージョン

.NET SDK 6.0.100

以前の動作

両方のファイルが同じコピー先にコピーされました。 コピーされる 2 つ目のファイルにより、最初のファイルが上書きされ、どちらのファイルが "勝った" (上書きした) のかは、ほぼ偶然によるものでした。

場合によっては、ビルドが失敗しました。 たとえば、単一ファイル アプリを作成しようとすると、次のビルド出力に示すように、バンドラーが ArgumentException で失敗しました。

C:\Program Files\dotnet\sdk\5.0.403\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.403\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.403\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 に設定することもできます。

影響を受ける API

該当なし