私たちのプロジェクトでは、いくつかの NuGet パッケージを使用しています。そのうちのいくつかは、LINQ to Objects for C# 2.0 を再実装するライブラリである LinqBridge を参照しています。LinqBridge.dll ファイルは /packages/PackageName/lib/20/LinqBridge.dll の下にあるため、明らかに .NET 2.0 にのみ適用されるはずです。
問題は、ソリューション内のすべてのプロジェクトが .NET 4.0 にビルドするように構成されていても、LinqBridge.dll バイナリが最終的な /bin ディレクトリにコピーされ、Razor ビューに大混乱をもたらすことです。IEnumerable で .Select() を実行すると、組み込みの LINQ 呼び出しと、LinqBridge が提供する再実装された呼び出しとの間にあいまいな呼び出しがあります。
再実装されたバージョンは明らかに必要ありません。出力 /bin ディレクトリから LinqBridge.dll を削除するだけで、すべて正常に動作します。ただし、これは容認できる恒久的な解決策ではありません。
古い .NET バージョン用のファイルを /bin 出力にコピーするのをやめるように何かを構成する方法はありますか?
編集:ソリューションプロパティの「ビルドイベント」の下にある「ビルド後のイベントコマンドライン:」コマンドにこれを追加して、ソリューションをまとめました:
del $(SolutionDir)\bin\LinqBridge.dll
まだ理想にはほど遠いですが、少なくとも私のプロジェクトは今のところ実行できます。