解析器错误无法加载类型 [命名空间].Global

Parser Error Could not load type [namespace].Global

我为此焦急了两天。我已经通读并遵循了可能数十条 SO 建议,但我仍然收到解析器错误。

TL;DR:

我们尝试了很多方法来消除网站的解析器错误,但都无济于事。

历史:

昨天我们有一个功能完美的 ASP.NET / JavaScript / AJAX 网站,我们整个生产车间都使用该网站在整个组装过程中跟踪电路板。我对其进行了备份并部署了 UI 更改并开始出现错误。将备份副本复制到站点顶部,一切都很好(除了未部署更改)。我尝试了几次,每次都使用备份进行恢复。

一夜之间,我考虑只创建一个要部署到的测试站点,而不是像以前那样剪切和粘贴,我在 VS 2010 IDE 中使用 Web Publish 到 test site,它不起作用(它部署得很好,但有相同或相似的解析器错误)。

不过...

现在,无论我做什么,主生产站点由于某种原因坏了*,试图用备份替换站点不再有效,到目前为止我们已经花了一整天的时间来调试这个.我的同事目前正在旁边建立一个最低限度的网站,让我们的生产工人在我们解决这个问题时勉强过关。

我们尝试过的:

SO question, as well as this SO question, and this SO question 中的几乎所有建议。可能还有一些我们忘记了。

环境:

网络服务器:Server 2012 w/ IIS 8.5

开发箱:Windows 7 Pro 64 位,带 VS 2010 / 2017(本场景中未使用,但我们有)。

应用程序:ASP.NET 3.5,前端使用JavaScript、JQuery、AJAX,后端使用C# [WebMethod]s与MariaDB对话(MySQL).

*更新:

我的同事刚刚完成了 scrape-by-til-we-fix-it 网站,并且遇到了完全相同的解析器问题。所以现在他正在创建一个 WinForms 应用程序。

这让我相信存在比我们理解的更全球化的问题,但我们在同一个 IIS 服务器上的所有其他网站仍然 运行 很好,所以它不能在服务器范围内,否则它们不会'没用。

我们看到的实际错误:

Server Error in '/' 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 'PCBIDRecord.Global'.

Source Error: 


Line 1:  <%@ Application Codebehind="Global.asax.cs" Inherits="PCBIDRecord.Global" Language="C#" %>

Source File: /global.asax    Line: 1 

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1087.0

堆栈跟踪:

Event code: 3006 
Event message: A parser error has occurred. 
Event time: 6/13/2017 4:38:10 PM 
Event time (UTC): 6/13/2017 11:38:10 PM 
Event ID: 7effc328553b424c8f6005608ed8f11b 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT-1-131418706905858364 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: C:\inetpub\wwwroot\PCBClient\ 
    Machine name: [REDACTED] 

Process information: 
    Process ID: 1316 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\PCBClient 

Exception information: 
    Exception type: HttpException 
    Exception message: Could not load type 'PCBIDRecord.Global'.
   at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
   at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
   at System.Web.Compilation.BuildManager.CallAppInitializeMethod()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

Could not load type 'PCBIDRecord.Global'.
   at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding)
   at System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath)
   at System.Web.UI.TemplateParser.ParseInternal()
   at System.Web.UI.TemplateParser.Parse()
   at System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType()
   at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider)
   at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()
   at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
   at System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean isPrecompiledApp)
   at System.Web.Compilation.BuildManager.CompileGlobalAsax()
   at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()

Could not load type 'PCBIDRecord.Global'.
   at System.Web.UI.TemplateParser.ProcessException(Exception ex)
   at System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding)
   at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding)

Could not load type 'PCBIDRecord.Global'.
   at System.Web.UI.TemplateParser.GetType(String typeName, Boolean ignoreCase, Boolean throwOnError)
   at System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName, String src, Assembly assembly)
   at System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData)



Request information: 
    Request URL: http://[REDACTED]/ 
    Request path: / 
    User host address: [REDACTED]
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: IIS APPPOOL\PCBClient 

Thread information: 
    Thread ID: 6 
    Thread account name: IIS APPPOOL\PCBClient 
    Is impersonating: False 
    Stack trace:    at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
   at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
   at System.Web.Compilation.BuildManager.CallAppInitializeMethod()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)


Custom event details: 

我终于能够弄清楚哪里出了问题。我们启动了一个旧的虚拟机,它有一个有问题的软件的工作副本,但上面没有其他网站。我们能够将我们的生产车间指向 VM,因此他们的工作不受阻碍。那么问题来了,让其他网站和虚拟机上的 运行 起来有多难?好吧,事实证明这并不太难,但是有几个挑战,特别是启用 32 位应用程序、设置默认页面和禁用表单身份验证。一旦我将这些设置与实时服务器上的设置相匹配,我就能够让新站点成功显示在 VM 上。因此,我使用几乎完全相同的设置向后解决了原始站点的问题,瞧,该站点开始运行了。

在上周的崩溃中,我知道我尝试了所有这些,但默认页面除外(我们到各个网站的快捷方式都有特定的页面名称,因此没有必要)。我想直到上周五我才尝试过正确的组合。

希望这能帮助其他人在处理解析器错误时添加更多尝试。