问题
我无法将网站(称为“zzz”)部署到我们的生产环境中。以下是例外情况:
Server Error in '/Admin' Application.
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: Could not load type 'zzz.Admin.Default'.
Source Error:
Line 1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="zzz.Admin.Default" %>
Line 2:
Line 3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Source File: /Admin/default.aspx Line: 1
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0
类似的错误发生在这里或者这里CodeBehind
但我对更改代码不感兴趣,CodeFile
因为 1)该项目在我的本地机器上和部署到开发中都运行良好(代码中唯一的变化是在指向不同数据库的 web.config 中)并且 2)有迹象表明还存在其他潜在问题。
细节
这是一个旧网站,我不得不对其进行一些更改,并借此机会进行了一些清理(例如合并不同项目中存在冲突的重复代码……)。该解决方案之前分为四个不同的项目(管理员、帐户、“默认网站”根目录和另一个),每个项目在 IIS 上都有自己的虚拟目录(根网站下有 3 个)。我将其合并为一个项目并删除了虚拟目录。在我的计算机上一切都运行良好。在开发环境中一切都运行良好。但它在生产中不起作用。
如果我按照以前的方式复制 /bin 文件夹,网站就可以再次运行。
旧版本/代码;适用于本地、开发和生产;虚拟目录。
+-+ website zzz
+-+ /Account
| +-- /Account/bin (Account.dll)
|
+-+ /Admin
| +-- /Admin/bin (Admin.dll)
|
+...
新版本/代码;适用于本地、开发;bin 文件夹中共享 dll;无虚拟目录。不适用于生产。
+-+ website zzz
+-+ /Account
|
+-+ /Admin
|
+-+ /bin (zzz.dll)
|
+...
为了让网站投入生产,我必须将 bin 文件夹复制到以前的位置:
+-+ website zzz
+-+ /Account
| +-- /Account/bin (zzz.dll)
|
+-+ /Admin
| +-- /Admin/bin (zzz.dll)
|
+...
如果我删除临时文件,我可以看到在临时位置创建的 /Admin 和 /Account 文件夹(使用新的 dll),即使所有内容都应该在一个文件夹下(对吗?)。
我期望临时文件会出现,C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\
但是它们却被创建在一个更高的级别,例如C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\admin
,每个 /bin 文件夹被复制到的位置都有一个临时文件。
我尝试删除该网站的临时文件、启动和停止该网站以及启动和停止应用程序池。由于同一实例托管了多个不同的网站,因此尚未尝试重新启动,但这可能很快就会发生。
环境
两台不同的机器,位于负载平衡器后面,但都引用了网站所在的共享文件夹。事实上,DFS管理实际上是用于在两台机器之间同步网站文件夹(这有关系吗?)。
据我所知,我们的开发和生产环境是相同的,但可能存在一些不同步的情况,这种情况以前也发生过。我不确定我在寻找什么,因为 IIS 设置总体上看起来是相同的。
web.config 中没有有关缓存的任何内容。
应用程序池“启用 32 位应用程序”在所有环境中均设置为 false。
超级取回未启用(从未启用)。
win forms 项目针对 .net framework 4
IIS 7.5.7600.16385
Windows Server 2008 R2
编辑更新
有 15 个补丁在开发版上而不是在生产版上,还有 65 个补丁在生产版上而不是在开发版上。试图找出最好的方法来整理这些补丁(在这里)。
答案1
重新启动解决了这个问题(我们定期进行的维护)。我猜有些东西被缓存在某个地方了。如果有人有更好的解释,我会接受那个答案。
答案2
就我的情况而言,重新启动还不够。
我打开了 IIS 管理器并浏览了应用程序池。(右键单击 -> 查看应用程序)
我看到我的旧路径仍然列出,多次,但它们所属的应用程序已被删除,当通过 IIS 管理器浏览有问题的网站时,会调用正确的文件夹。
所以我按照这个指示邮政删除“幻影应用程序”。(实质上:关闭 iis。编辑C:\windows\system32\inetsrv\config\applicationHost.config
并删除仍包含错误路径的应用程序节点。重新启动 iis。)