.NET SDK では、異なるソース パスのファイルが発行出力の同じファイル パスにコピーされる場合に、新しいエラー (NETSDK1152
) が生成されます。 これは、プロジェクトとそのプロジェクト参照に、発行出力に含まれているのと同じ名前のファイルが含まれている場合に発生する可能性があります。
導入されたバージョン
.NET SDK 6.0.100
以前の動作
両方のファイルが同じコピー先にコピーされました。 コピーする 2 番目のファイルは最初のファイルを上書きし、どのファイルが "won" かはほとんど任意でした。
場合によっては、ビルドに失敗しました。 たとえば、単一ファイル アプリを作成しようとすると、次のビルド出力に示すように、バンドルは 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 プロジェクトは ASP.NET Core Web サービスを参照し、両者はそれぞれ独自の appsettings.json ファイルを持っています。
-
CopyToOutputDirectory
が不必要にAlways
に設定されているプロジェクト項目。
バイナリ ログ ファイル は、重複したファイルの原因を見つけるのに役立ちます。
または、 ErrorOnDuplicatePublishOutputFiles プロパティを
false
に設定することもできます。
影響を受ける API
なし
.NET