Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法加载文件或程序集-无法在asp上工作,可在桌面上工作_C#_C++_Asp.net_.net_Dependencies - Fatal编程技术网

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

C# 无法加载文件或程序集-无法在asp上工作,可在桌面上工作,c#,c++,asp.net,.net,dependencies,C#,C++,Asp.net,.net,Dependencies,在使用asp.netweb项目上的本机dll依赖项并在VS2015中使用IIS express进行调试时我感到恐惧: 无法加载文件或程序集“XXX.DLL”或其依赖项之一。找不到指定的模块 说明:执行当前web请求期间发生未经处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源 异常详细信息:System.IO.FileNotFoundException:无法加载文件或程序集“XXX.DLL”或其依赖项之一。找不到指定的模块 但是在同一台机器上的简单表单应用程序中,相同的依赖

在使用asp.netweb项目上的本机dll依赖项并在VS2015中使用IIS express进行调试时我感到恐惧:

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

说明:执行当前web请求期间发生未经处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

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

但是在同一台机器上的简单表单应用程序中,相同的依赖关系可以很好地工作-因此我假设所有依赖关系和共同依赖关系都存在

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

我已经尝试过的:

  • 将所有潜在的依赖项放在web项目输出文件夹中
  • 将所有潜在的依赖项放在/system32/路径中
  • 将所有潜在的依赖项放在/system32/inetsrv和/sysWOW64/inetsrv中
  • 安装C++重新分发表(2010, 2012, 2013)
  • 我“解锁”DLL,因为它们“来自另一台计算机”(CASpol)
  • 依赖沃克没有给出任何明确的结果
  • 过程监视器没有给出任何明确的结果
一些细节:

VS2015社区,使用Windows Server 2012(测试系统)在Azure虚拟机上运行,干净安装

该应用程序使用CGAL和BOOST库(c++)

依赖树,C++引用了CLR C++项目,它引用了本机C++(仅使用CGAL/Boost);p> 然后在forms应用程序(工作)或asp.net web应用程序(不工作)中使用C#包装器

将Cgal DLL(大约6个文件)放入bin输出文件夹足以运行表单应用程序

<强> ps <强>:当然,在我的2台DEV机器上(Win 7,Win 10),ASP.NET项目工作得很顺利,但是这些包含了巨大的C++引用的专用安装。 PPS:由于外部原因,我目前确实更喜欢使用iis express。我必须在开发环境中模拟在干净的Win10笔记本电脑上部署应用程序,只需最少的外部安装

PPPS看来win10开发机器根本不工作-编辑:这是关键线索,请参见下面我的答案,


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

解决方案:在Win 10上,我将dll输出(\bin文件夹)复制到程序文件(x86)\IIS Express文件夹中(因为我使用的是32位版本)

显然,在Win7上不需要这样做-我将不得不调查原因

我在以下方面找到了此解决方案:

编辑:另一个更优雅的(?)解决方案是禁用web.config中的卷影复制,如中所示

我找到的最简单的解决方案是关闭卷影复制,这会导致直接从bin目录加载DLL。(…)只需将hostingEnvironment元素添加到web.config:


...
...

2想法:(1)您能否在故障发生之前攻击web服务器进程的调试器,并可能获得更多信息。(2) 将其剥离回存根实现并添加代码,直到代码中断。禁用卷影复制对我来说非常有效!我花了太多的时间跟踪这些东西,直到我发现了这个问题,因为调试并没有揭示问题,procmon也没有。您应该将其标记为答案。:-)
<configuration>
 ...
  <system.web>
    ...
    <hostingEnvironment shadowCopyBinAssemblies="false" />