1

私たちのプロジェクトでは、いくつかの 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

まだ理想にはほど遠いですが、少なくとも私のプロジェクトは今のところ実行できます。

4

2 に答える 2

1

NuGetは、さまざまな.NETバージョンのさまざまなバイナリをサポートしているため、使用しているパッケージが正しくビルドされていないことをお勧めします。

パッケージの作成者に連絡して、net11またはnet20バージョンのみにLinqBridgeが含まれるように修正できるかどうかを確認します。

複数の.NETFrameworkバージョンとプロファイルのサポート

多くのライブラリは、特定のバージョンの.NETFrameworkを対象としています。たとえば、Silverlightに固有のライブラリの1つのバージョンと、.NETFramework4の機能を利用する同じライブラリの別のバージョンがあるとします。これらのバージョンごとに個別のパッケージを作成する必要はありません。NuGetは、同じライブラリの複数のバージョンを1つのパッケージに入れて、パッケージ内の別々のフォルダーに保持することをサポートしています。 (もっと...)

于 2011-09-11T11:15:18.267 に答える
0

私たちが見つけた便利なアプローチは、標準の LinqBridge パッケージの代わりにLinqBridge.Embedded Nuget パッケージを使用することでした。これにより、Linqbridge が C# ファイルとしてプロジェクト内に埋め込まれます。そのため、bin フォルダーにコピーされず、Razor ビューのコンテキストに読み込まれません。

参照するアセンブリは .Net 2.0 アプリケーションからも参照されるため、引き続き .Net 2.0 でビルドする必要があるため、これは便利でした。したがって、そのアセンブリは LinqBridge.Embedded を使用し、LinqBridge アセンブリは最終的に 4.0 サーバーの bin フォルダーには入りません。

于 2014-10-10T04:11:41.110 に答える