.net IIS 7.5+;64位无法加载C++;CLR DLL

.net IIS 7.5+;64位无法加载C++;CLR DLL,.net,iis,visual-c++,visual-studio-2015,clr,.net,Iis,Visual C++,Visual Studio 2015,Clr,我的团队最近从VS2008升级到VS2015。我们的项目是C语言SDK层和C++核心库的组合,它们在混合模式CLR和直接非托管引用/pVojk.< /P>中工作。 针对桌面可执行文件的VS2015编译对于跨多个环境的托管和非托管版本都可以正常工作。但是,当我们在IIS/bin中使用相同的.NET驱动程序和C++库时,Web服务器无法加载任何用CLR编译的C++ DLL。这在VS2015内,在我们的开发和生产箱上都在VS2015外。我们可以将任何C++驱动程序设置为托管CLR,并且我们看到失败的结

我的团队最近从VS2008升级到VS2015。我们的项目是C语言SDK层和C++核心库的组合,它们在混合模式CLR和直接非托管引用/pVojk.< /P>中工作。 针对桌面可执行文件的VS2015编译对于跨多个环境的托管和非托管版本都可以正常工作。但是,当我们在IIS/bin中使用相同的.NET驱动程序和C++库时,Web服务器无法加载任何用CLR编译的C++ DLL。这在VS2015内,在我们的开发和生产箱上都在VS2015外。我们可以将任何C++驱动程序设置为托管CLR,并且我们看到失败的结果:

错误:无法加载文件或程序集“ConfigAuth.DLL”或其中一个 依赖关系。找不到指定的模块

文件被清晰地找到,路径变量被三次检查。我们已经运行了进程监视器来查找dll文件加载问题,但似乎找不到任何可以提供缺失内容线索的内容。我们过去曾遇到过丢失可再发行包的问题,并且读到一些组合失败的消息。我们已经卸载并重新安装了这些软件包,但可能是我们按错误的顺序/组合进行的

开发框/配置:

Windows 7,64位环境

以下的VC++可重新分配包安装在框中:201220132015(每个都是x86/64)< /p> 已安装2012-2015年的SxS合并模块

所有文件编译到Win32/x86平台

.NET4.5用于编译ASP.NETWCF服务构建以及所有C#管理的DLL

.NET 4是用于编译C++ CLR < /P>的McScLIB iS++64位,在VS2015上使用2015工具包编译的C++库有问题,

IIS应用程序池支持32位程序集

IIS应用程序池已设置所有目录和windows访问权限以访问该文件


PATH变量已被设置,并针对其他文件进行了测试,这些文件的加载与非CLR文件一样正常。我调试该变量的典型方式是分两个阶段进行的

首先,我想看看是否缺少任何.Net依赖项。任何找不到的程序集都会将日志写入指定位置。有时可能发生的情况是,应用程序池将在ASP.Net编译期间对副本程序集进行阴影处理,而不包括依赖项。这将有助于找到它

第二,我运行以获取一组本机代码依赖的DLL,如果我不能通过查看该集合来判断,我将运行并筛选失败的DLL加载(路径以“.DLL”结尾,结果不是“SUCCESS”)


感谢您的帮助,我们使用了这两种工具,发现一个较低级别的驱动程序出现故障。我们知道,如果我们在正在加载的任何驱动程序上使用/clr选项,IIS将无法加载它们。如果我们关闭/clr,它们将加载。我很确定它正在检查GAC中具有a/clr设置的驱动程序,这可以解释我们的问题。如果我们将其放入项目的Bin文件夹中,那么设置为/clr的驱动程序肯定无法编译,如果我们将其放入PATH文件夹中,它仍然无法加载。Fusion Loggin中的错误:从文件(hr=0x80131018)提取清单导入时出错。它还在bin文件夹中找到这个较低的库。所以,我有点不知所措,如果它正在制作阴影复制或没有。这在VS 2015 IDE Express IIS和IIS单机版中失败。日志:程序集下载成功。正在尝试安装文件:C:\Users\kieran\Source\Repos\iTrace\2dmi\WebAPI\bin\bitsuffle.dll日志:进入下载缓存安装阶段。错误:从文件中提取清单导入时出错(hr=0x80131018)。错误:安装失败,hr=0x80131018。错误:未能完成程序集的设置(hr=0x80131018)。探测已终止。在对日志进行了更多的工作和调查之后,对此进行了最新更新。许多日志输出都是失败的,但也有成功的例子,因此可能会产生误导。我能够找到导致问题的唯一驱动程序是我们的writemark.dll,我确认它是一个CLR/托管dll。我知道IIS在加载这些类型的驱动程序时遇到问题,并且听说使用GAC是一种选择。除了全球回购,还有其他方式吗?我可以在web.config中执行一些操作来控制此驱动程序并将其正确加载到IIS中吗?