无法加载文件或程序集 - 不在asp上工作,在桌面上工作

时间:2017-05-25 18:15:47

标签: c# c++ asp.net .net dependencies

在asp.net web项目上使用原生dll 依赖项并在VS2015中使用 IIS express 进行调试时我感到很害羞:

  

无法加载文件或程序集“XXX.DLL”或其依赖项之一。找不到指定的模块。

     

说明:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.IO.FileNotFoundException:无法加载文件或程序集“XXX.DLL”或其某个依赖项。找不到指定的模块。

HOWEVER 相同的依赖项在同一台机器上的简单表单应用程序中运行正常 - 因此我假设存在所有依赖项和共同依赖项

也许你有一些线索,这怎么可能?

我已尝试过的内容:

  • 将所有潜在的依赖项放在Web项目输出文件夹中
  • 将所有潜在的依赖项放在/ system32 / path
  • 将所有潜在的依赖项放在/ system32 / inetsrv和/ sysWOW64 / inetsrv中
  • 安装c ++可再发行组件(2010,2012,2013)
  • 我解除了'dll',因为他们“来自另一台电脑”(CASpol)
  • 依赖步行者没有给出任何明确的结果
  • 流程监控器没有给出任何明确的结果

一些细节:

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>

我现在有点卡住了,谢谢。

1 个答案:

答案 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" />