我一直在远程处理一个运行ASP.NET 3.5网站的Windows Server 2003虚拟机的奇怪情况......或者,至少是试图运行它。
该网站是使用该项目的标准安装程序安装的,该安装程序已用于安装在多个不同的位置。但是,这个表现不同。
网站运行失败。在事件查看器中,报告以下错误:
异常信息: 异常类型:HttpException 异常消息:找不到指定的模块。 (例外 来自HRESULT:0x8007007E)
该错误在网站上报告为:
异常详细信息: System.IO.FileNotFoundException:The 找不到指定的模块。 (HRESULT异常:0x8007007E)
运行Fusion日志查看器,我可以看到ASP.NET正在尝试加载以下程序集:
CppCodeProvider,版本= 8.0.0.0, 文化=中性, 公钥= b03f5f7f11d50a3a VJSharpCodeProvider,版本= 2.0.0.0, 文化=中性, 公钥= b03f5f7f11d50a3a
首先,ASP.NET没有理由加载这些程序集。我在machine.config或任何其他配置中找不到这些程序集所需的任何配置。我们尝试安装3.5 SDK,但都没有安装。我的开发机器上只有CPPCodeProvider的第10版。
这里到底发生了什么?
注意:请不要粗略搜索谷歌搜索和回答。我找不到任何适用的东西。如果有人回答
“定义DEBUG常量”和“定义TRACE常量”
我打算穿过小管。
答案 0 :(得分:4)
该死的红鲱鱼。
事实证明我有一个依赖于msvc71.dll的依赖项。因为我的虚拟机没有此DLL,所以加载依赖项失败。但是,由于代码中的蹩脚异常消息(以及框架的这一部分,坦率地说),此错误显示为
找不到指定的模块。 (HRESULT异常:0x8007007E)
当我看到这样的事情时,我的第一直觉就是提升fuslogvw
。现在,当我启用融合日志记录时,它告诉我无法找到CppCodeProvider
和VJSharpCodeProvider
。所以,我认为这些是导致错误的原因。 QED。
他们没有。融合无法确定它们对ASP.NET网站的执行没有任何影响。 了解这一点,互联网搜索者!它是一个红鲱鱼!
当我做了应该从头开始做的事情时我想到了这一点 - 我在服务器上删除Process Monitor,设置过滤器以观察w3wp进程以尝试加载DLL,等待FILE NOT FOUND。
我在我的开发机器上找到了msvc71.dll的副本(Sql Server有它)并将其放在虚拟机的system32上。我所要做的只是允许网络服务读取和执行DLL的权限,一切都恢复正常。