3

我一直在远程处理运行 ASP.NET 3.5 网站的 Windows Server 2003 虚拟机的奇怪情况......或者,至少正在尝试运行它。

该网站是使用该项目的标准安装程序安装的,该安装程序已用于在多个不同位置进行安装。但是,这个人的行为有所不同。

该网站在运行时失败。在事件查看器中,报告以下错误:

异常信息:异常类型:HttpException 异常消息:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

该错误在网站上报告为:

异常详细信息:System.IO.FileNotFoundException:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

运行融合日志查看器,我可以看到 ASP.NET 正在尝试加载以下程序集:

CppCodeProvider,版本=8.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a VJSharpCodeProvider,版本=2.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a

首先,ASP.NET 没有理由加载这些程序集。我在 machine.config 或根据需要列出这些程序集的任何其他配置中找不到任何位置。我们尝试安装 3.5 SDK,但都没有安装。我的开发机器上只有第 10 版的 CPPCodeProvider。

这到底是怎么回事??

注意: 请不要粗略的谷歌搜索和回答。我发现什么都不适用。如果有人回答

“定义 DEBUG 常量”和“定义 TRACE 常量”

我要打穿你的内胎。

4

1 回答 1

4

该死的红鲱鱼。

事实证明,我有一个依赖于 msvc71.dll 的依赖项。因为我的虚拟机没有这个DLL,所以加载依赖失败。但是,由于代码中的异常消息(坦率地说,是框架的这一部分),这个错误显示为

指定的模块无法找到。(来自 HRESULT 的异常:0x8007007E)

看到这样的东西,我的第一反应就是旋转起来fuslogvw。现在,当我打开融合记录时,它告诉我CppCodeProvider并且VJSharpCodeProvider找不到。所以,我认为这些是错误的原因。QED。

他们不是。 事实上,融合无法定位它们,因为它对 ASP.NET 网站的执行完全没有影响。 知道这一点,互联网搜索者!它是一条红鲱鱼!

当我从一开始就做了我应该做的事情时,我发现了这一点——我在服务器上删除了进程监视器,将过滤器设置为监视 w3wp 进程以尝试加载 DLL,然后等待未找到文件。

我在我的开发机器上找到了一个 msvc71.dll 的副本(Sql Server 有它)并将它放到虚拟机的 system32 上。然后我所要做的就是允许网络服务读取和执行 DLL 的权限,然后一切都恢复正常了。

于 2011-02-03T16:59:32.113 回答