3

ASP.NET MVC 4プロジェクトがあります。アンマネージド C++ dllのメソッドを内部的に呼び出すマネージド C++ dllを参照しています。問題は、Visual Studio でプロジェクトをデバッグするときに、「ファイルまたはアセンブリ、またはその依存関係の 1 つを読み込めませんでした」というエラーが発生することです。見つからない DLL は、アンマネージ C++ dllによって使用されます。必要なすべての DLL を ASP プロジェクトの bin ディレクトリに配置しています。

WPF プロジェクトではすべて正常に動作しますが、ASP.NET MVC4 プロジェクトで同じことを行うとエラーが発生します。ASP.NET MVC4 プロジェクトの起動/デバッグ時にエラーが発生します。

私はできる限りのことを試しましたが、なぜこのエラーが発生するのかわかりません。

アイデア?

編集 Fuslogvw.exe を試してみたところ、2 つの出力/ログ ファイルが作成されています。私はその出力から少し混乱しています

あるファイルでは、最後に

バインディングは成功します。C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\9abdb93b\4655bb86\assembly\dl3\5113eba9\008d3984_ccb1cb01\Assembly.dll からアセンブリを返します。ログ: アセンブリは既定の読み込みコンテキストで読み込まれます。"

2番目のログでは、

=== バインド前の状態情報 ===
ログ: DisplayName = AssemblyName (部分)
WRN: アセンブリの部分的なバインド情報が提供されました:
WRN: アセンブリ名: AssemblyName | ドメイン ID: 2
WRN: アセンブリの表示名の一部のみを指定すると、部分バインドが発生します。
WRN: これにより、バインダーが不適切なアセンブリをロードする可能性があります。
WRN: アセンブリに完全に指定されたテキスト ID を提供することをお勧めします
。WRN: 単純な名前、バージョン、カルチャ、および公開キー トークンで構成されます。WRN:この問題の詳細と一般的な解決策については、
ホワイトペーパー > http://go.microsoft.com/fwlink/?LinkId=109270を参照してください。
ログ: Appbase = file:///c:/users/haris.hasan/documents/visual studio 2012/Projects/MvcApplication1/MvcApplication1/
ログ: 初期 PrivatePath = c:\users\haris.hasan\documents\visual studio 2012\ Projects\MvcApplication1\MvcApplication1\bin
ログ: 動的ベース = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\9abdb93b ログ: キャッシュ ベース = C:\Windows\Microsoft.NET\ Framework\v4.0.30319\Temporary ASP.NET Files\root\9abdb93b ログ: AppName = 4655bb86 アセンブリの呼び出し: (不明)。=== WRN: 一致するネイティブ イメージが見つかりません。
ログ: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\9abdb93b\4655bb86\assembly\dl3\5113eba9\008d3984_ccb1cb01\AssemblyName.dll から読み込まれた IL アセンブリ。

4

2 に答える 2

1

1- MS C++ 再頒布可能パッケージの更新が原因である可能性があります! それらをアンインストールして、再度インストールしてください。
2- IIS はパス内の各マネージド dll のシャドウ コピーを作成していると思いますが、管理されていない別のパスの場合は、それを構成する必要があります。詳細については、そのリンクを確認してください。

于 2013-01-11T13:57:13.493 に答える
1

x64 プラットフォームで実行していますか? 次に、IIS が x64 モードで実行されていて、単に x86 dll をロードしていない可能性があります。

関連する IIS アプリケーション プールを x86 モード (enable32BitAppOnWin64 => true) に設定することでこれをテストし、それが正しく機能しているかどうかをテストできます。

さらに、マネージ DLL および / または C++ dll のセキュリティ設定がロードを妨げている可能性があります。C++ dll では、少なくとも「認証されたユーザー」グループがそれを読み取れることを確認してください。

于 2013-01-11T12:51:11.613 に答える