在asp.net web项目上使用原生dll 依赖项并在VS2015中使用 IIS express 进行调试时我感到很害羞:
无法加载文件或程序集“XXX.DLL”或其依赖项之一。找不到指定的模块。
说明:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.IO.FileNotFoundException:无法加载文件或程序集“XXX.DLL”或其某个依赖项。找不到指定的模块。
HOWEVER 相同的依赖项在同一台机器上的简单表单应用程序中运行正常 - 因此我假设存在所有依赖项和共同依赖项
也许你有一些线索,这怎么可能?
我已尝试过的内容:
一些细节:
VS2015社区,在带有Windows Server 2012(测试系统)的Azure VM上运行,干净安装
该应用程序使用CGAL和BOOST库(c ++)。
'依赖树'如下:C#包装器引用一个CLR C ++项目,该项目又引用本机C ++(只有这一个使用CGAL / Boost);
然后在表单app(works)或asp.net web app中使用C#包装器(不起作用);
将Cgal dll(大约6个文件)放入bin输出文件夹就足以运行表单应用程序了。
PS :当然在我的2台开发机器上(Win 7, Win 10 )asp.net项目可以顺利运行 - 但这些包含了巨大的c ++的专用安装引用。
PPS :由于外部原因,我目前非常喜欢使用iis express。我必须模拟在干净的Win10笔记本电脑上,在开发环境中部署应用程序,只需最少的外部安装
PPPS 似乎win10开发机器完全没有工作 - 编辑:这是关键线索,请参阅下面的答案和Ho do I reference native files in IIS express? < / p>
我现在有点卡住了,谢谢。
答案 0 :(得分:2)
解决方案:在Win 10上,我将dll输出( \ bin文件夹)复制到程序文件(x86)\ IIS Express 文件夹中(因为我正在使用32位版)。
显然,Win7上并不需要这样做 - 我将不得不调查原因
我找到了这个解决方案: Ho do I reference native files in IIS express?
编辑:另一个更优雅的(?)解决方案是在web.config中禁用阴影复制,如http://faithlife.codes/blog/2013/05/using-native-dlls-from-asp-net-apps/
&#34;我发现最简单的解决方案是关闭影子复制,这会导致DLL直接从bin目录加载。(...)只需添加 hostingEnvironment web.config中的元素:&#34;
<configuration>
...
<system.web>
...
<hostingEnvironment shadowCopyBinAssemblies="false" />