ネイティブCアプリケーションから呼び出された混在モードのDLLがロードされません: Unknownモジュールで 'System.IO.FileLoadException'の未処理の例外が発生しました。混在モードアプリケーションがネットワーク共有から起動したときに、C++ DLL関数呼び出しに失敗しました。アンマネージcアプリケーションから呼び出されました
追加情報:ファイルまたはアセンブリ 'XXSharePoint、Version = 0.0.0.0、Culture = neutral、PublicKeyToken = e0fbc95fd73fff47'またはその依存関係の1つを読み込めませんでした。最小限の許可要求を許可することができませんでした。 (HRESULTからの例外:0x80131417)
私の環境は次のとおりです。ネイティブCアプリケーションは、混在モードのC++ DLLを呼び出し、C#DLLをロードします。これはローカルドライブからロードされたときに正しく動作しますが、ネットワークドライブ上記のメッセージで失敗します。
GetProcAddressと同様に、LoadLibraryの呼び出しが成功します。私が関数を呼び出すと、読み込みエラーが発生します。
私はCアプリケーションにデジタル署名をしており、2つのDLLに「強力な名前」の署名を行っています。上記のメッセージのPublickKeyTokenは、指定されたDLLと一致します。私はまた、その厳密な名前のkeytokenにFullTrustを与えるために、クライアントにCASPOLコマンドを発行しました。それがうまくいかなかった場合、CASPOLコマンドを実行して、ネットワークドライブのURL(アプリケーションのディレクトリへのパスを含む)にFullTrustを許可しました。結果に変化はない。
すべての依存関係を削除してみましたので、最初の混合モードDLLだけがありました。すべての関数のボディを "成功"整数値の単なる戻り値に置き換えました。結果は変わらない。私はそれを混合モードからWin32に変更し、構成プロパティ>>一般>>共通言語ランタイムサポートを「共通言語ランタイムサポート」から「共通言語ランタイムサポートなし」に変更した場合のみ、DLLを呼び出しても期待される結果が得られました「成功」整数の戻り値を返します)。
私が読んだところでは、強力な名前の署名をDLLに追加してから、CASPOLコマンドを使用して、クライアントマシンでその強力な名前FullTrust権限を与えることが必要でした。私は両方のことをしましたが、結果は同じでした。 – Steve
これは署名の問題ではありません。 .NET Frameworkは、共有からFullTrustを実行するように構成する必要があります。 ランタイムセキュリティの下に追加コード>新しいコードグループをコードグループ 条件タイプのURLを選択 共有のパスをURLとして指定 既存のコードを使用するパーミッションは "FullTrust" に設定され、動作します。 このコードグループでは、共有のアクセス許可を制御できます。 –