【发布时间】:2018-02-14 07:35:51
【问题描述】:
我的团队最近从 VS2008 升级到 VS2015。我们的项目是在混合模式 CLR 和直接非托管引用/pinvoke 下工作的 C# SDK 层和 C++ 核心库的组合。
桌面可执行文件的 VS2015 编译适用于跨多个环境的托管和非托管版本。但是,当我们在 IIS/bin 中使用相同的 .NET 驱动程序和 C++ 库时,Web 服务器无法加载使用 CLR 编译的任何 C++ dll。这在我们的开发和生产盒中都在 VS2015 内部和外部。我们可以将任何 C++ 驱动程序设置到托管 CLR 中,我们会看到失败的结果:
错误无法加载文件或程序集“ConfigAuth.DLL”或其之一 依赖关系。找不到指定的模块。
文件已明确找到,PATH 变量已检查三次。我们已经运行进程监视器来查找 dll 文件加载问题,但似乎无法找到任何可以提供有关缺失内容的线索的内容。我们过去曾遇到过缺少可再发行包的问题,并且读到某些组合会失败。我们已经卸载并重新安装了这些软件包,但也许我们以错误的顺序/组合进行操作?
开发箱/配置:
Windows 7、64 位环境
盒子上安装了以下 VS C++ Redistributable Packages:2012,2013,2015(均为 x86/64)
已安装 2012-2015 年的 SxS 合并模块
所有文件编译到 Win32/x86 平台
.NET 4.5 用于编译 ASP.NET WCF 服务构建以及所有 C# 托管 dll
.NET 4.0 是用于编译 C++ CLR 的 mscorlib
IIS 7.5+ 64bit 无法在 VS2015 上加载使用 2015 工具包编译的 C++ 库。
IIS 应用程序池支持 32 位程序集
IIS 应用程序池已设置所有目录和窗口访问权限以访问文件
PATH 变量已被设置并针对其他可以像非 CLR 一样正常加载的文件进行测试
【问题讨论】:
标签: .net iis visual-c++ visual-studio-2015 clr