3

我有一个ASP.NET MVC 4项目。我正在引用一个托管 C++ dll,它在内部调用非托管 C++ dll的方法。问题是在 Visual Studio 中调试我的项目时出现“无法加载文件或程序集或其依赖项之一”错误。它找不到的 Dll 由非托管 C++ dll使用。我将所有需要的 DLL 放在 ASP 项目的 bin 目录中。

在 WPF 项目中一切正常,但在 ASP.NET MVC4 项目中执行相同操作时出现错误。启动/调试 ASP.NET MVC4 项目时出现错误。

我已经尝试了几乎所有我能做的事情,但不确定为什么会出现这个错误。

想法?

编辑 我尝试了 Fuslogvw.exe,它正在创建两个输出/日志文件。我对它的输出有点困惑

在一个文件最后说

绑定成功。从 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\9abdb93b\4655bb86\assembly\dl3\5113eba9\008d3984_ccb1cb01\Assembly.dll 返回程序集。日志:程序集在默认加载上下文中加载。”

在第二个日志中它说

=== 预绑定状态信息 ===
LOG:DisplayName = AssemblyName(部分)
WRN:为程序集提供了部分绑定信息:
WRN:程序集名称:AssemblyName | 域 ID:2
警告:仅提供部分程序集显示名称时会发生部分绑定。
警告:这可能会导致活页夹加载不正确的程序集。
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 调用程序集:(未知)。=== 警告:未找到匹配的本机图像。
日志:从 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

您是否在 x64 平台上运行?那么 IIS 可能在 x64 模式下运行并且根本不加载 x86 dll。

您可以通过将相关的 IIS 应用程序池设置为 x86 模式(enable32BitAppOnWin64 => true)来测试它,并测试它是否正常工作。

此外,托管 DLL 和/或 C++ dll 的安全设置可能会阻止它加载。在 C++ dll 上,至少要确保“经过身份验证的用户”组可以读取它。

于 2013-01-11T12:51:11.613 回答
1

1- 可能是因为 MS C++ 可再发行包更新!卸载它们并重新安装。
2-我认为 IIS 正在创建路径中每个托管 dll 的卷影副本,但对于非托管另一个路径,您必须对其进行配置。检查该链接以获取更多信息。

于 2013-01-11T13:57:13.493 回答