10

だから私はこれに関するいくつかの投稿を見つけようと周りを見回しました、そして私の特定の質問(私が見つけることができた)に対処するものはたくさんありますがどれもありません。

プロジェクトにいくつかのDLLを追加しようとしていますが、それらのいくつかは次のものからのものです。

C:\Windows\Microsoft.NET\Framework\v3.5\XXX.YYY.dll

そして私がこれを期待しているのはGACから来るはずです。

VisualStudioでDLLを参照するためのベストプラクティスを提案してください。

4

2 に答える 2

25

それはそれが機能する方法ではありません。Project + Add Referenceを使用する場合は、常に参照アセンブリを追加します。これはGACからのアセンブリではありません。GACは実行時の実装の詳細であり、プログラムの実行時にのみアセンブリを提供するために使用され、ビルド時には使用されません。

そのように機能することが非常に重要です。マシン上のGACのコンテンツは、ユーザーのマシン上のGACのコンテンツと一致しません。ユーザーのマシンがプログラムを実行するように正しく構成されていない場合に、参照アセンブリのユーザーのGACコンテンツへのマッピングが適切な診断で確実に処理されるように、多くのDLLHell対策が実施されています。

これは、エクスプローラーでc:\ windows\assemblyに移動するときにGACフォルダーを直接表示できない理由でもあります。シェル拡張ハンドラーは詳細を非表示にして、GAC化されたアセンブリを参照アセンブリとして追加するなどの間違いを防ぎます。この同じ拡張ハンドラーは.NET4アセンブリにはインストールされていません。c:\ windows \ microsoft.net \ assemblyを確認して、GACの構造を確認できます。そこから参照を追加しても問題ないとは思わないでください。参照アセンブリは.NET4ではさらに重要であり、ランタイムアセンブリとは完全に異なります。

したがって、C:\ Windows \ Microsoft.NET \ Framework \ v3.5に格納されている参照アセンブリを表示することは完全に正常です。これは、System.Core.dllなどの.NET3.5固有の参照アセンブリのホームディレクトリです。.NET 4プロジェクトの場合、参照アセンブリはc:\ program files \ reference assemblyに格納されます。C:\ Windows \ Microsoft.NET \ Framework\v4.0.30319を参照しないでください。この回答をチェックして、正しい参照アセンブリを使用しないことによってどのような診断不能な惨めさが引き起こされる可能性があるかを確認してください。

于 2013-02-15T12:28:25.857 に答える
1

Those assemblies are assemblies of the .NET Framework 3.5. The assembly cache is located at

%SystemRoot%\assembly

You may distribute the .NET Framework 3.5 (scroll the the end of the page) together with your project. Aso if you are using VS Setup projects you can simply use the properties page to reference it.

To reference those assemblies you can easily right-click "References" > "Add Reference" and choose the assembly from the .NET tab. For referencing GAC assemblies refer to this question.

于 2013-02-15T10:33:20.733 に答える