2

私は10個のプロジェクトを持つソリューションを持っています。多くのプロジェクトは、サードパーティの DLL に依存していますfoo.dll

問題は、foo をアップグレードすると、どういうわけか Visual Studio でオブジェクト ブラウザに移動すると、2 つのバージョンのfoo.dll.

古いバージョンの foo.dll を参照しているプロジェクトを見つけて、すべてのプロジェクトで依存関係が 1 つだけになるようにアップグレードするにはどうすればよいですか?

4

5 に答える 5

3

これは、一度だけやりたいことです。

あなたへの私のお勧めは、メモ帳を入手することです。はい、メモ帳です。

各プロジェクトの .csproj ファイルを開きます。

XML には、パスなどを含む、参照されている DLL の概要を説明するセクションがあります。それらが GAC から出ている場合でも、.NET リンカによって使用されるバージョンなどがファイルに含まれます。 . 参照への行全体が正確に一致する必要があります。

これらを、正しいとわかっている 1 つのプロジェクトと比較してください。

.NET で参照を処理することは、.NET の最悪の部分の 1 つです。DLL地獄v2.0へようこそ:(

于 2009-01-26T01:43:30.223 に答える
0

最善の答えは、可能な場合、この依存関係を持つプロジェクトを 1 つだけにすることだと思います。1 か所で処理できます。

これが、プロジェクトが DLL の周りに途方もなく太いラッパー ライブラリで構成される必要があることを意味する場合、これは最善の方法ではない可能性があります。しかし、少なくともそれを考慮してください。

于 2010-06-11T13:52:52.690 に答える
0

私はこれと同じ問題を抱えていました。

プロジェクト A はプロジェクト B を参照しました。プロジェクト C はプロジェクト B を参照したプロジェクト D を参照しました。これにより、プロジェクト C がプロジェクト B を参照するようになりました。プロジェクト D を削除し、プロジェクト C を (コード内で) クリーンアップしましたが、プロジェクト B は残りました。プロジェクト D の bin フォルダーを指すバイナリ参照として推測します。

Visual Studio 内のプロジェクト B を更新しました。スタートアップ Project C として実行すると、このエラーがスローされました。

修正するために、プロジェクト C の参照に進み、未使用の参照を削除しました。

ところで、あなたの実際の質問 - 問題のある dll がどこにあるのかを見つける方法 - は、次のように簡単に答えることができます: . 2. エクスプローラーで FileVersion の列を追加し、この列で並べ替えます。出来上がり!

于 2012-02-24T18:50:06.313 に答える
0

GAC に両方のバージョンの Foo.dll がインストールされているようです。古いものを削除するには、gacutilをチェックしてください。

単なるファイル参照の場合は、各プロジェクトで「参照」を開き、「Foo」を右クリックしてプロパティを選択します。結果のプロパティウィンドウに、バージョンなどの情報が表示されます。

通常、このような依存関係への最善のアプローチは、プロジェクト レベル (ただし、実際のソリューションの一部ではない) に、これらの種類の DLL を含む「依存関係」と呼ばれる別のフォルダーを用意することです。

また、ビルドの前にアセンブリの正しいバージョンを bin フォルダーにコピーする、サーバー上のビルド自動化 (TFS = チーム ビルド、SVN = クルーズ コントロールなど) も検討します。

アセンブリにはさまざまな方法があり、さまざまなアプリケーションでどのアセンブリが使用されているか混乱しがちです。将来のすべてのプロジェクトに適用できるテンプレート化可能な方法で、この問題を一度解決するのに時間を費やす価値があります。

于 2009-01-26T01:43:09.007 に答える
0

問題は理解できましたが、質問の仕方が正しいかどうかわかりません。.NET が参照アセンブリを選択する方法を説明しましょう。

  • アセンブリ参照は、フローティングまたは固定できます (プロジェクトの参照フォルダーでアセンブリを右クリックし、[プロパティ] を選択して、[特定のバージョン] を探します)。バージョンが変動している場合、.NET は最新のものを見つけて使用します。説明した問題を回避できるように、参照のバージョンを「固定」することは理にかなっています (つまり、製品の新しいバージョンをインストールしてもアプリケーションが壊れることはありません)。

  • アセンブリは、グローバル アセンブリ キャッシュに置くことも、ファイル システムに置くこともできます。1 つのアプローチを選択し、それをプロジェクト全体で一貫して使用する必要があります。これにより、少なくともどこを見ればよいかがわかります。

この 2 つの側面を理解していれば、問題は発生しないはずです (少なくとも、問題が発生した場合の対処方法を知っておく必要があります)。バージョンを固定してアップグレードする場合は、10 個の何かのプロジェクトを開いて参照をアップグレードする必要がありますが、偶発的なアップグレードから隔離されます。

バージョンをフロートさせると、すべての参照がインストールされている最新バージョンを自動的に取得します。アセンブリを GAC に配置すると、DLL ファイルの残りの部分や偶発的なコピーを検索パスとファイル システムで検索する必要がなくなります。

于 2009-01-26T02:09:04.680 に答える