IIS 中的简单 asp.net 预编译问题

Posted

技术标签:

【中文标题】IIS 中的简单 asp.net 预编译问题【英文标题】:Simple asp.net precompilation issue in IIS 【发布时间】:2010-07-16 11:56:30 【问题描述】:

看起来我对一个简单的问题感到震惊。我正在托管一个预编译的网站。它可以在我的本地盒子中编译并正常工作。但是当我在 IIS 中托管时,它会失败并出现以下错误。

无法加载类型“MyHero.Home1”。

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Home.aspx.vb" Inherits="MyHero.Home1" %>

我可以在 Bin 中找到 MyHero.dll。我也在对象浏览器中打开了它,可以看到有一个 Home1 类型。 MyHero.Home1 类型存在并且是公共的。所以它肯定是预编译的。不确定我在这里缺少什么。这是我第一次使用 VB.NET。

这就是代码背后的样子

Partial Public Class Home1
    Inherits System.Web.UI.Page

部分类的其他部分是设计器生成的。并且在 Home.aspx.designer.vb

Partial Public Class Home1

我没有上传代码作为它的预编译站点。

我在 Windows server 2003 上使用 IIS。任何指针都会很有帮助。

我可以看到 Home1。列在对象资源管理器中的 MyHero 命名空间下。只是为了确保我在 Home1 类周围添加了命名空间 Hero,尝试但结果相同。还尝试从 aspx 页面中删除命名空间前缀继承没有帮助。

Windows Server 2003 上的 IIS 是否存在任何已知问题。.NET 框架和 IIS 的安装顺序是否会影响这一点?我在新安装的盒子上托管这个。它在我的开发框中运行良好。

感谢dariom,我安装了融合日志查看器。这是绑定日志,似乎没有给出太多线索。是吗?

The operation failed.
Bind result: hr = 0x80131018. No description available.

Assembly manager loaded from:  c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  c:\windows\system32\inetsrv\w3wp.exe
--- A detailed error log follows. 
=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = MyHero
 (Partial)
LOG: Appbase = file:///C:/Inetpub/wwwroot/cmail/MyHero/
LOG: Initial PrivatePath = C:\Inetpub\wwwroot\cmail\MyHero\bin
LOG: Dynamic Base = c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\2125db8d
LOG: Cache Base = c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\2125db8d
LOG: AppName = 97d7397b
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Inetpub\wwwroot\cmail\MyHero\web.config
LOG: Using host configuration file: \\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet.config
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/2125db8d/97d7397b/MyHero.DLL.
LOG: Attempting download of new URL file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/2125db8d/97d7397b/MyHero/MyHero.DLL.
LOG: Attempting download of new URL file:///C:/Inetpub/wwwroot/cmail/MyHero/bin/MyHero.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Inetpub\wwwroot\cmail\MyHero\bin\MyHero.dll
LOG: Entering download cache setup phase.
ERR: Error extracting manifest import from file (hr = 0x80131018).
ERR: Setup failed with hr = 0x80131018.
ERR: Failed to complete setup of assembly (hr = 0x80131018). Probing terminated.

【问题讨论】:

【参考方案1】:

伙计们,我能够解决这个问题。这是一个 Windows 7 安全问题。我正在将代码从 Windows 7 笔记本电脑上传到服务器。 dll 似乎带有一些隐藏的安全权限。

我已使用 winrar 归档 dll 并将其提取到服务器上。只是为了确保删除所有安全权限。 dll 现在加载正常,只是它困扰了我们将近一个星期。

感谢您的所有帮助。

【讨论】:

【参考方案2】:

将 Home1 类放在 MyHero 命名空间中就可以了。国际海事组织。

【讨论】:

我可以在 ObjectExplorer 中看到它的 uder MyHero 命名空间。只是为了确保我添加了名称空间,但结果相同。还从 aspx 页面中删除命名空间前缀继承没有帮助。【参考方案3】:

当你说你的应用程序是预编译的......你是怎么做到的?我很惊讶在您的页面指令(在预编译页面中)中看到 CodeBehind="" 属性。确保您的虚拟目录中没有文件“Home.aspx.vb”。您只需要 Inherits=""。您还可以将程序集的名称添加到继承值中,例如:Inherits="MyHero.Home1, MyHero"

【讨论】:

现在好像有了一些进展。在我将程序集名称添加到 Inherits 错误后读取.. 无法加载程序集“MyHero.dll”。确保在访问页面之前已对其进行编译。我正在使用 VS2008 的发布选项到本地目录并将文件移动到服务器/这个程序集在 Bin 文件夹中 很难相信程序集位于带有该错误消息的 bin 文件夹中!我不确定默认情况下该发布功能喜欢将文件放在哪里,但我似乎记得它就在本地文件之上...确保您发布到一个新文件夹(在您的项目之外)。不过最好使用这个:microsoft.com/downloads/… 是的,马特这是非常奇怪的错误。根据我的逻辑思维,这听起来没有任何意义。【参考方案4】:

您的方案听起来应该可以正常工作 - 我看不出您的 ASPX 和代码隐藏文件有任何问题。

如果您有权访问运行应用程序的 IIS 服务器,则可以尝试使用 Fusion Log Viewer 来确定 .NET 运行时尝试加载 MyHero 程序集时发生的情况。 This MSDN Magazine article 包含有关启用活页夹日志记录和使用 Fusion Log Viewer 的详细信息。希望这可以揭示为什么找不到您的程序集。

【讨论】:

我没有在服务器上安装 .net 框架 SDK。我认为 Fusion log 是一个 SDK 工具? 是的,它是 .Net Framework SDK 的一部分。不确定它是否有效,但您可以尝试将 Fusion Log Viewer 可执行文件 (fuslogvw.exe) 临时复制到服务器以帮助进行故障排除,然后再将其删除。 感谢您花费了一段时间来获得 box 上的管理员权限并安装 SDK。我发布的日志对我来说似乎没有多大意义。如果您从中得到任何线索,请帮助我。 我认为 Fusion 日志文件的最后 3 行表明存在某种问题。我以前从未见过这种情况,不确定解决方案可能是什么。您可以尝试删除临时 ASP.NET 文件夹(C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files)的内容,然后重试。否则我不确定你为什么在提取程序集的清单时遇到问题...... 一篇帖子暗示这可能与杀毒软件有关:msmvps.com/blogs/carlosq/archive/2007/03/23/…这是一个远景,但也许?

以上是关于IIS 中的简单 asp.net 预编译问题的主要内容,如果未能解决你的问题,请参考以下文章

在 asp .net mvc 5 中预编译剃须刀视图

IIS预编译提升加载速度

ASP NET MVC 4 Razor Views 预编译花费大量时间

首次启动速度慢的问题记录IIS性能优化

预编译的 asp.net 网站报错

理解 ASP.NET 预编译