Global.asax中的“解析器错误消息:无法加载类型”


203

我正在MVC3项目上,并收到以下错误:

解析器错误消息:无法加载类型'GodsCreationTaxidermy.MvcApplication'。

源错误:

第1行: <%@ Application Codebehind="Global.asax.cs" Inherits="GodsCreationTaxidermy.Core.MvcApplication" Language="C#" %>

我得到的错误是无法加载GodsCreationTaxidermy.Core.MvcApplication,但在此屏幕快照中,Core部分未显示在错误中:

错误页面截图

是否有人对此错误有任何想法或解决方案?


8
您的应用程序中是否确实有GodsCreationTaxidermy.Core.MvcApplication类?如果没有,请创建相同的文件并编译项目。它肯定会工作。
Shailesh 2012年

4
是的,我确实有GodsCreationTaxidermy.Core.MvcApplication(Global.asax.cs)
PsychoCoder

根据屏幕截图,似乎正在使用的Global.asax文件看起来与您显示的文件不同。
达林·迪米特洛夫

检查Inherits字符串是否与应用程序中类的路径(名称空间+路径名)相同,即它们都是GodsCreationTaxidermy.Core.MvcApplication
linkerro

那是达林的问题之一,无论我做什么,总是把核心部分
遗漏

Answers:


175

您的本地Web服务器运行的代码与您实际工作的代码不同。确保已停止调试,停止本地Web服务器,按照Peter的建议进行清理和重建,再次检查global.asax和global.asax.cs,然后重试。

如果这不起作用,并且您正在使用本地IIS,请尝试在IIS管理器中删除该站点,然后手动重新创建它。


4
确实是非常奇怪的错误。我将其部署到服务器上的IIS并得到了它。清理和重新编译也为我工作。
Piotr Kula 2014年

2
清理/重建+重新创建虚拟目录,然后它起作用了。
fantastik78

4
当我在两个Visual Studio实例中打开相同的项目时出现了问题。因此,我有两个IIS Express实例正在运行。我不得不关闭一个,然后解决了。
lvmeijer

4
您也可以尝试删除项目中的bin / obj文件夹。
arni 2015年

1
我按照这些说明进行了一些其他的清理/重建工作,更改了.asax文件中的空格,重新格式化了我的监视器,并在潘(Pan)管道的陪伴下进行了轻松的跳汰,似乎可以解决问题。
MrBoJangles

206

检查项目输出路径(项目属性/ Build)是否设置为bin,或者 设置为bin\Releasebin\Debug

出于某种原因,IIS(VS开发服务器或本地IIS)总是从bin目录访问库(并且不会查找子目录)


27
归功于到期。解决了我的问题,我的应用程序设置为使用bin \ Debug,将其更改为bin可以解决它。非常感谢。
乔伊·鲍勃

有趣的是,ASP.NET项目没有使用默认的输出路径bin / $(Configuration)/。非常感谢您的回答!
Jaanus Varus 2013年

2
@JamesPusateri:不过要小心。每次启动时,它将使用/ bin中的内容。因此,可能是您在更改此版本后做出的结果。
Vincent de Lagabbe

1
哇,在2018年IIS仍以这种方式工作。不好,对微软来说很不好。谢谢!
罗德里戈T.18年

1
近7年来没有任何变化,建议仍然
有用

33

尝试修改您的global.asax文件(在某处简单添加一个空格)并重新运行。这将强制内置的Web服务器刷新并重新编译global.asax文件。

同时进行清理和重建-应该解决问题


4
修改global.asax并没有为我做任何事情,但是清理并重新构建解决了问题:)
NightShovel

我没电的时候遇到了这个问题。清洁和重建有所帮助。谢谢!
Gorgi Rankovski

清理失败。构建失败。我的构建路径没有问题。但是,这确实达到了目的。谢谢!
egandalf

谢谢您的回答。Munnings先生
dada

30

如果在global.asax生成后更改命名空间信息(项目或类级别),有时会发生这种情况。

右键单击该Global.asax文件,然后选择“打开方式”,然后选择“带有编码的XML(文本)编辑器”(其他编辑器也可以使用,但这是我使用的)。

然后在XML指令中编辑“继承”部分

<%@ Application Codebehind =“ Global.asax.cs” Inherits =“ GodsCreationTaxidermy.MvcApplication” Language =“ C#”%>)

使其与Application类的实际全名匹配。就是这样。

另一个选择是从Global.asax.cs复制所有代码,然后删除并创建另一个Global.asax文件(然后将代码复制回到Global.asax.cs)。


这也对我有用。我已经更改了解决方案中所有项目的程序集的名称空间。因此,必须Global.asax按照此答案中所述编辑文件,并使其与“项目配置”设置中的文件匹配。
希瓦

21

我关闭并重新打开了Visual Studio,它正常工作。


4
关闭所有视觉工作室
Jboy Flaga 2014年

11
首先,我们所有人都应该尝试下车,关上所有车门,然后再次返回。
pajics,2015年

不,您必须同时关闭所有汽车的车门。
BlackICE

17

我必须去BUILD-> CONFIGURATION MANAGER并-哎呀-选中我项目旁边的框以确保它确实被构建。


2
我不明白那票选票。这可能是一个解决方案。实际上,这比大多数人想像的要重要。...如果未选中,它并不总是最明显的位置。特别是在有几种配置时。
Anthony Mason

我喜欢你的回答和推理!
UKM,2016年

1
这也是我的问题,我也不知道如何从配置中取消选择项目。
赛斯,

5

我今天遇到这个问题,花了我一段时间才找到原因。

基本上,我的主要VS2015项目包括一个子项目,该子项目使用更高版本的.Net Framework构建。

奇怪的是,当您遇到此问题时,VS2015会很高兴地报告该解决方案已经建立好了,但是当您尝试运行该网站时,它只会给您带来误导性错误,表明您的Global.asax.cs文件有误。

因此,如果看到此错误,而“清理/重建”无济于事,请打开项目的References树,并检查是否有感叹号。

在此处输入图片说明

另外,请在您的Output窗口中查看以下消息:

The primary reference "C:\Projects\Business Objects 4\bin\Release\BusinessObjects.dll" 
could not be resolved because it was built against 
the ".NETFramework,Version=v4.5" framework. 
This is a higher version than the currently targeted framework
".NETFramework,Version=v4.0".

当然,解决方案是右键单击主项目,选择顶部选项卡“应用程序”,然后将目标框架版本更改为与子项目匹配的更高版本。

令人讨厌的是,Visual Studio 2015将允许您完全构建和运行静默包含此问题的解决方案。它在自找麻烦..!


2

您也可以在IIS中检查站点的属性。(在IIS中,右键单击该站点,然后选择“属性”。)确保“物理路径”设置指向的是您的应用程序而不是其他应用程序的正确路径。(这为我修复了此错误。)


2

我只是在MVC5应用程序上遇到此问题,但对我来说没有任何帮助。在我尝试将SVN还原为项目的较早版本之后,就发生了这种情况。

我必须删除 global.asax.cs,然后右键单击“项目”->“添加新项目”-> Global.asax,然后添加一个新文件,然后最终将其修复。

只是认为这可能对某人有帮助。


如果这可以为​​您解决,则可能是现有global.asax.cs文件的“ Build action”属性有些混乱 。应该将其设置为“编译”。global.asax文件本身的构建操作应设置为“内容”。
史蒂文·里肯斯

我确实做了@iAteABug_And_iLiked_it所做的事情,问题已解决!
zinczinc18年

2

我必须报告,我尝试了至少4条来自该帖子的建议。他们都没有工作。但是,我很高兴地报告我从备份中恢复过来。只需更新日志文件中我最后的代码更改即可。花了不到10分钟。花费3倍于阅读这篇文章并尝试其他建议。抱歉。

这是一个非常奇怪的错误。祝遇到这个鬼怪的人好运。


2

当我有两个运行相同项目的Visual Studio实例时,我遇到了同样的问题。因此,我关闭了Visual Studio,只打开了一个实例,现在可以正常工作!


2

我正在研究一个较旧的“基于文件夹”的ASP.NET Web项目(我讨厌)-并且发现这是我的解决办法:

创建一个App_Code文件夹(如果还没有)

Global.asax.vb文件移到App_Code文件夹中

Global.asax中的标记可以省略任何名称空间(至少对于这种类型的项目,afaik):

<%@ Application Codebehind="Global.asax.vb" Inherits="MyApp" Language="VB" %>

...其中“ MyApp”是在Global.asax.vb中定义的类的名称


2

“构建->配置管理器,并且-糟糕-选中我项目旁边的复选框,以确保它确实被构建。” 那并转到Windows资源管理器中的项目文件夹,按选项并取消选中“只读”复选框将很有帮助。


简直对我有用。该项目尚未启用已启用的构建选项,我不知道为什么,但是谢谢,我需要此解决方法。
willyMon '18


1

我也面临同样的问题。尽管遵循了每个答案,但是它没有用。然后,我将“ Inherits = namespace.class ”更改为“ Inherits = 标准装配名称 ”,即“ Inherits = namespace.class,assemblyname,Version =,Culture =,PublicKeyToken = ”希望能帮上


1

如果您意外地将VS解决方案设置为“多个启动项目”(如果您从同一解决方案运行Web和WebApi),也会发生这种情况。

您可以通过在解决方案资源管理器中右键单击解决方案并选择“属性”来进行检查,然后查找“启动项目”。


我的情况与此类似:我在解决方案中运行了错误的API项目。实际上,我以为我正在运行的API中确实有一个编译器错误,但是即使运行干净后,VS在运行解决方案时也没有注意到。
约翰(John)

1

.vs从解决方案根目录中删除目录。清洁。重建。

这个问题偶尔使我发疯,而我不可避免地最终在这里通过答案进行分页。我怀疑有多种原因会产生此异常,这一次对我有用。


几个小时尝试其他一千条建议,而这正是为我做了的。我的应用程序在Visual Studio中的调试和发行版配置中都运行良好,但是一旦发布到IIS,我就得到了错误。删除.vs文件夹并重新部署可解决此问题。
菲利普·斯特拉特福德

1

是的,我阅读了所有答案。但是,如果您是我,并且已经拔出所有剩余的头发,请尝试检查\ bin文件夹。就像大多数proj文件可能在XML元素下分组了多个配置一样PropertyGroup,然后我将OutputPath值从'bin \ Debug'更改为删除'\ Debug'部分并重新构建。这会将文件放在\ bin文件夹中,以使Express IIS可以查找和加载内部版本。我只是想知道管理这些不同版本的正确方法是什么,以便本地调试部署能够找到并加载目标环境。


这是唯一有效的方法。这么多的埋葬尸体...像这样的东西使我认真考虑其他职业。
doveryai

0

通过授予文件夹正确权限以及从IIS检查,可以解决此问题。

在本地环境中进行测试时,我被允许所有人使用。但是在发布模式下,我认为我们仅授予ASP.Net用户权限。


0

我也遇到同样的错误...检查您正确开发的应用程序的名称,即。分配的名称空间和程序集名称,还尝试物理更改为应用程序创建的文件夹的名称,所有这些都应与文件global.asax中存在的上述名称空间中的名称相同。


0

我也遇到相同的错误...检查您的虚拟目录的IIS配置,并确保属性-ASP.NET-ASP.NET版本与项目属性-应用程序-目标框架相同。(这为我修复了此错误。)


0

我的应用程序是在VS的旧版本中构建的,并且没有bin文件夹。我已经将其升级到更新的版本,并且经历了部署它的噩梦。我最终将此错误跟踪到“项目”>“属性”>“应用程序”。目标框架设置为2.0;在服务器上更改它以使其与IIS管理器/应用程序池中的值匹配为我解决了此问题。


0

我发现更改项目上的命名空间,而不在整个解决方案中重构是我的问题。检查您的项目属性,并查看您的名称空间是什么,确保全面对齐。


0

对我来说,问题是我没有在项目中包含global.asax.cs。而且因为我将文件从.net 4.5复制到4.0,所以我没有注释掉4.0中不需要的行。由于未包含它,因此Visual Studio仍会毫无问题地对其进行编译。但是,当我将其包括在内时,它突出显示了引起问题的线条。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//using System.Web.Http;
using System.Web.Mvc;
//using System.Web.Optimization;
using System.Web.Routing;

namespace YourNameSpace
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

0

我花了一天的时间试图解决这个问题。

唯一有效的方法是删除.sln文件,创建一个新文件,然后一个接一个地添加项目。

¯\ _(ツ)_ /¯-编程-¯\ _(ツ)_ /¯


0

就我而言,Web程序集是GAC的一部分...因此,构建后,需要将其安装在GAC中并且可以正常工作。


0

我遇到此错误消息,并最终发现该错误消息具有误导性。以我为例,IIS中似乎存在路由问题,导致从Web服务器上另一个站点读取global.asax,从而产生了错误。

在IIS中,我的站点绑定到http:* 80:webservices.local,并包含一个名为MyAPI的应用程序。使用Web服务器的ip地址调用MyAPI应用程序时,我收到了可怕的消息。

为了成功调用我的应用程序,我必须在所有调用MyAPI应用程序的计算机上为webservices.local添加一个主机文件条目。然后,我的所有请求都必须带有http://webservices.local/MyAPI/前缀才能正确路由。


0

我绝对在这里尝试了一切,但没有任何效果。我的项目是在VS 2013中进行的。此后,我已升级到VS 2015,并在2015年创建了我的所有新应用程序,但加载,编译,构建等2013年在该版本中构建的所有旧应用程序。

我最终只是在2015年加载了该解决方案,它为我解决了这一问题。


0

我在这个问题上花了很多天。我终于通过这篇帖子的以下建议组合解决了它。

  1. 将平台目标更改为任何CPU。我目前没有此配置,因此必须转到配置管理器并添加它。我专门针对x64进行编译。仅此一项并不能解决错误。
  2. 将输出路径更改为bin\而不是bin\x64\Debug。在更改平台目标之前,我已经尝试过几次。除了收到由于格式无效而无法加载程序集的错误以外,它别无所求。

需要明确的是,在开始工作之前,我必须同时完成这两项工作。我已经多次尝试了它们,但是直到我都做完之后才修复。

如果我将这些设置之一更改回原始设置,尽管运行了Clean Solution,并手动删除了bin目录中的所有内容,但我仍然再次遇到相同的错误。


0

有两种方法可以做到这一点:

  • 配置管理器将dll版本显示为“ 64”和“ any cpu”版本的混合。将它们全部放置在相同的构建中即可修复该问题。

  • 在分支之间切换时,IIS Express路径有时不会更新。右键单击任务栏中的“ IIS Express”>“显示所有应用程序”,并确保路径指向正确的分支。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.