3

特別なプラグイン フォルダーを使用して追加の DLL をロードする VS 2005 C# プロジェクトがあります (アセット変換プロセスでノードとして使用するため)。

このフォルダーには、C# と C++ の DLL が混在しています。

私が抱えている問題は、シャドウ コピーが有効になっている場合、C++ DLL が Assembly.LoadFrom を使用してロードすることを拒否することです。カスタム アプリ ドメインの作成を試み、Load を使用しましたが、これも失敗しました。

最後に、DLL を byte[] データとして読み取り、その上で Load を使用しようとしましたが、C# DLL のみがこの方法で動作し、「追加情報: 検証不能なコードはポリシー チェックに失敗しました。(Exception from HRESULT: 0x80131402)」というエラーが表示されます。 "。

ネット上の記事で、その特定の DLL をビルドするときに /clr:safe を使用しようとするように促されましたが、Microsoft コードの何千ものエラーのためにビルドに失敗しました... (どうやら)

シャドウ コピーを無効にすると、LoadFrom はすべての DLL に対して正常に機能します。アプリ自体が Maya のプラグインであり、これは Maya 8.5 で動作していましたが、2008 / 2009 で失敗します (シャドウ コピーが有効な場合)。

アプリの実行中に DLL ファイルがロックされるのを防ぐため、シャドウ コピーを使用することを強くお勧めします (Plugins フォルダーは、アプリの実行中に Perforce が更新できる場所に保存されます)。

シャドウ コピーがカスタム フォルダと C#/C++ DLL の組み合わせでこれらの問題なしに動作するように説得する方法についてのアイデアはありますか?

4

2 に答える 2

1

信頼の問題のように聞こえます。Fusionログを取得してみてください(このブログ投稿を参照してください)。C ++ DLLは、でコンパイルされていないため検証/clr:safeできません。そのため、完全な信頼としてのみロードできます。おそらくシャドウコピーの場合、ダウンロードキャッシュの場所は完全に信頼されていません。

caspol -sこれが開発のみの問題である場合、実行すると稼働する可能性があります。

于 2008-11-07T14:52:55.303 に答える
0

Assembly.Load(byte[] ...) は、検証不可能な (混合モード) アセンブリを明示的に禁止します。問題はMicrosoft Connectで確認できます。

于 2010-03-01T10:18:17.353 に答える