-1

最初は、.Net Framework 3.5 に取り組んでいました。したがって、GAC パスは次のようにコードにハードコードされていました。

C:\Windows\assembly\GAC_64\{0}\1.0.0.0__008145f79b9aec14\{0}.dll

その後、.Net Framework 4.0 に移行しました。必要なパスは次のようになります

C:\Windows\Microsoft.NET\assembly\GAC_64\{0}\v4.0_1.0.0.0__008145f79b9aec14\{0}.dll

現在、コードに 2 番目のパスを追加することで問題を解決できます。しかし、Microsoft が次のフレームワーク セットをリリースすると、失敗する可能性があります。

そのため、.Net Framework とは無関係に GAC バイナリにアクセスできる方法があるかどうかを知りたいと思いました。

これに関するコメントは役に立ちます。ありがとうございました

4

2 に答える 2

5

GAC からアセンブリをロードする場合は、完全修飾名を使用してロードします

Assembly.Load("SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3");

GAC で見つかった場合は、そこから読み込まれます。

GAC のパスをどこにもハードコーディングしないでください。サービス パックやパッチの間であっても、いつでも変更される可能性があり、信頼できない実装の詳細です。

于 2012-05-09T10:54:31.350 に答える
2

それらをハードコーディングしないでください

GACのパスを使用してアセンブリをロードする必要はないと思います(これには大きな理由があります)ので、バイナリファイルをロードせずに手動で検査する必要があるかもしれません(たとえば、利用可能なアセンブリをリストしたり、メタデータを調べます)。

パスに依存せずにGACにアクセスする必要がある場合、それはあなたにとって地獄です(Windowsディレクトリの変更、GAC構造は自明ではなく、効果的なパスは環境、アセンブリタイプなどに依存します).

これを操作するためのアンマネージ API があります。MSDN のこちらを参照してください。たとえば、GAC のパスを取得するには、次のように記述します。

GetCachePath(ASM_CACHE_GAC, pPath, MAX_PATH);
于 2012-05-09T10:57:44.690 に答える