“无法加载类型[名称空间] .Global”使我感到悲伤


106

在我的.Net 2.0 Asp.net WebForms应用程序中,我的Global.asax包含以下代码:

<%@ Application CodeBehind="Global.asax.cs" Inherits="MyNamespace.Global" Language="C#" %>

但是,当我构建时,出现错误提示:

无法加载类型'MyNamespace.Global'。

这似乎是因为编译器在Global.asax文件中看不到MyNamespace命名空间(在文件Global.asax.cs后面的代码中定义)(在R#智能中没有显示。)。原来这是一个很难破解的螺母……任何帮助将不胜感激!

注意:Global.asax和Global.asax.cs位于同一文件夹中。

注意2:使用csc从vs提示符下进行编译时,编译正常


应用程序中的其他页面是否可以正常工作?有时,将Web服务器配置为运行1.1却将应用程序编译为2.0时会发生这种情况
Noon Silk 2010年

是的,“目标框架”为2.0
gkdm 2010年

Answers:


162

我遇到的导致此问题的一种情况是,当您通过“构建配置”指定构建平台时。

如果将x86指定为构建平台,Visual Studio将自动将bin / x86 / Debug分配为该项目的输出目录。这对于其他项目类型完全有效,但ASP.NET希望将程序集输出到Bin文件夹的Web应用程序除外。

在我的情况下,我发现它们同时被输出到(Bin和Bin / x86 / Debug)中,但其中一些dll(最难理解的是您的Web应用程序dll)却从Bin中丢失了。夹。

显然,这导致了编译问题,因此导致“无法加载全局类型”异常。清洁解决方案并删除程序集对于后续的构建没有什么影响。我的解决方案是将Web应用程序的项目设置中的输出路径更改为Bin(而不是bin / x86 / Debug)。


13
另外:尝试关闭并重新打开VS。如果您使用内置的调试服务器,则它可能正在运行其他网站。打开/关闭将重新注册本地主机端口。
BradLaney 2012年

1
就我而言,它想将项目输出放在inetpub \ wwwroot \ myproject \ bin中,但是我将iisexpress配置为在myProject \ bin中进行查找。只需更改输出路径即可解决问题。
shindigo 2014年

就我而言,我有一个本应包含的.dll,但由于某种原因未设置为“本地复制”。这引起了与此答案中所述类似的编译问题。
HockeyJ 2015年

谢谢,斯坦托纳。这就是对我有用的方法,正好让我及时回家。
比尔·诺曼

3
将项目的输出路径更改为bin文件夹即可解决此问题。感谢您救救我的一天!
Tunahan

18

您是否更改了项目的名称空间?我偶尔会在“项目属性”对话框中更改名称空间的情况下看到这种情况,但是Visual Studio并未更改namespace现有代码文件中的声明。


你觉得我应该怎么做?
gkdm 2010年

1
检查.cs文件中的名称空间,并确保它与asax文件中声明的名称空间相同。我怀疑他们会有所不同...
PhilPursglove

那我不确定。我现在只能建议使用ILDASM重建并检查程序集中名称空间的内容。
PhilPursglove

谢谢,这是对我有帮助的解决方案。我将使用Resharper检查解决方案中的所有名称空间。
伦纳德

我只是发生这种情况:在MVC 5项目中(无关紧要),我更改了项目名称空间,但是忘记更改Global.asax(和App_Start文件夹)。不管经验如何,有时愚蠢的疏忽仍然会让您受益。
Jason Snelders 2014年

15

我是ASP .NET开发的新手,我也遇到过类似的问题。

我将班级更新为partial班级,并且运行良好。

public partial class Global : System.Web.HttpApplication

1
不知道为什么我的Global文件最后没有这个文件,但这对我来说是个问题,谢谢!
2015年


5

这是另一本书。当您从同一端口号启动多个Web应用程序时,似乎会发生这种情况。

基本上,我有两个分支需要工作,有一个主分支,一个暂存分支和一个发布分支。当我将分支切换到暂存分支时,我注意到它正在使用相同的端口地址配置,因此我选择对其进行更改。然后,我收到另一个警告,该保留与另一个已配置的应用程序冲突。IIS Express服务器对此很敏感,无论出于何种原因,它都会对配置产生影响。

通过简单地选择第三个未受影响的端口,此问题就消失了,因为它将端口映射到新的目录映射(我的分支在磁盘上的位置不同)。我注意到了这一点,因为我试图更改指向的类型名称,Global.asax但是即使在重新启动服务器之后,类型名称也没有改变,所以很明显,IIS Express部署并未反映出我正在更改的代码。

因此,在您为此失去太多睡眠之前,请尝试更改当前用于运行Web项目的IIS端口号。


5
  1. 右键单击Project Solution,然后选择Batch Build。
  2. 然后选择您的项目名称和清理并重建。

在VS 2015中对我来说效果很好。现在我可以使用Global事件了。我的Global.asax档案有这行

<%@ Application Language="C#" CodeBehind="~/App_Code/Global.asax.cs" Inherits="Global" %>

然后我将类文件Global.asax.cs放在AppCode文件夹中

public partial class Global : HttpApplication
{
    public Global()
    {
        //
        // TODO: Add constructor logic here
        //
    }
}

我希望这个能帮上忙


3

检查Global.asax.cs的生成操作。应该将其设置为Compile。

在解决方案资源管理器中,右键单击Global.asax.cs并转到“属性”。在“属性”窗格中,设置“构建操作”(调试时)。

似乎VS 2008默认情况下并不总是总是正确添加.asax(.cs)文件。


3

我遇到一个类似的错误

<clear/>

标记为的孩子(第一个孩子)

<assemblies>

在我的Web.config中标记。我已将标签插入到web.config中,以防止在IIS的“默认网站”下部署的应用程序中继承配置。


这无疑为我指明了正确的方向。最终我将<clear />放在父目录中,因为那是一个空的占位符。我认为真正的问题是清除了应用程序引用的程序集,从而阻止了应用程序程序集的加载。
Doug Lampe 2014年

我也经历过-显式删除选定的程序集,而不是清除列表,效果很好。
2014年

2

在我的情况下,它与项目的网站/ Web应用程序类型有关。我们最近移到了MVC,不得不将其更改为Web应用程序。

因此,该解决方案很简单:在解决方案资源管理器中选择您的网站并将其从解决方案中删除,然后右键单击该解决方案并选择“添加”->“现有项目”(不是“网站”),重新编译该网站。


2

旧帖子,但尝试从网站项目转换为Web应用程序项目时出现此错误。

按照此链接上的说明进行操作。我仍然遇到global.asax错误,但我所做的就是删除它,然后通过在Visual Studio中右键单击该项目并选择添加新项,将其重新添加回去。添加global.asax文件即可。


2

不幸的是,这些都不对我有用。我发现的修复更特定于开发,尤其是在本地计算机上进行调试。同样不幸的是,它并不能按照我希望的方式真正解决问题,但是,如果您不知所措,这可能会让您再次陷入困境。

TL; DR:在项目属性的Web选项卡中的“服务器”下,选择“使用本地IIS Web服务器”。地址,

http://localhost/MyApp" 

已填充(我有IIS7,.NET 4.0)。最初选择的是虚拟路径为“ /”的“使用Visual Studio开发服务器”

令我感到真正困惑的是,没有其他方法起作用,我经历了所有关于SO的建议,但没有任何结果。奇怪的是,当我添加了一个新的ascx文件(类似于从旧的.net 2.0(我认为)项目中添加的现有文件)时,出现了错误(似乎是我上次看了几个月)。这将允许从应用程序内部进行自定义用户管理。直到我尝试添加此新文件之前,它一直在很漂亮地工作了很长时间。添加它并看到错误后,我立即恢复了所有更改,但是Global.ascx错误不会消失,甚至不会浪费整个项目并从源代码管理中获取最新消息。


2

我已经将解决​​方案从VS2003转换为VS2010,并且在转换Web应用程序项目时遇到了问题。

我遇到了完全相同的问题,没有答案对我有用。

对我有用的是:

  • 右键单击解决方案,然后选择配置管理器
  • 查看了“活动解决方案配置”下拉列表中的每个配置。
  • 选中“构建”复选框,将Web应用程序包含在构建中。

似乎由于某种原因,我在转换过程中遇到的问题已将Web应用程序项目从构建中删除。

希望这个答案可以帮助其他有相同问题的人...


1

如果您重建或更改项目并从旧的文件中移出文件,请确保检查全局的Inherit块。就我而言,以前的项目/解决方案名为Intranet,我将其重新创建为Intranet,但是当我移动文件时,它不喜欢小写字母(duh)。只需对文件名进行常规浏览即可。



1

在项目中收到此错误时,我遇到了类似的问题。

Could not load type [Namespace].Global
Error in Line 1   etc etc

花了一些时间后,我怀疑一个函数可能在Class ..later中出现错误,并指出该特定函数使我的问题得以解决。

我不知道为什么Visual Studio在调试时没有给我那个特定的错误。但是由于类文件中的某些错误,可能会发生此错误。


1

这对我有用:第一件事:似乎无论您对Visual Studio说什么,IDE总是在文件中查找文件:bin(对于Web应用程序,当然对于我而言是当然),即使我对Visual Studio说了加载文件的特定路径,IDE会继续寻找错误的路径。因此,我将Build / Configuration Manager的输出类型更改为:Release(以前,我什至手动清理了解决方案,即使手动清除了),因此,当创建文件.dll时,我手动移至了项目/解决方案下的“ bin”文件夹夹。希望这会有所帮助!


1

就我而言,这是因为我的目标处理器(x64)我将其更改为x86清理了项目,重新启动了VS(2012)并重建了项目;然后它消失了。


1

当我最近遇到此问题时,我尝试了此处提到的所有方法,但均无济于事。扯掉头发后,我决定尝试删除全部代码库(是的,非常绝望!),然后从我的代码库中重新下载所有内容。完成此操作后,一切再次正常。

似乎是一个极端的解决方案,但只是想我将它包括在这里,因为该线程之前没有提到过。

(请注意,我又一次遇到此问题,是当Global.asax从需要在主机上注册的组件继承时。这丢失了,因此出现了同样的问题)。

TL; DR; 如果此主题中的所有答案均不适合您,请尝试删除然后重新下载整个代码库!


1

我已经多次遇到此问题,在每种情况下,我都在重建计算机或切换到新计算机。我的第一步(除了更新机器和安装Visual Studio外)是从Git中提取我的项目并对其进行测试。

我每次都遇到此错误,因为我在编译之前尝试访问本地代码。您会看到,我有Git和Subversion设置来忽略我的bin / build文件夹,因此从我的存储库中拉出后,我忘了运行一个从Nuget中拉出所需软件包的构建(因为我也有Git / SVN也忽略了它们)并创建了实际运行我的应用程序所需的DLL。

我怀疑这能否解决大多数人的问题,但是我没有在潜在解决方案列表中看到它,因此我想添加它。


1

就我而言,我已经将Global.asax添加到WCF项目中进行了试验,但决定将其删除。我从解决方案资源管理器中删除了它,但是由于它仍在文件夹中,因此管道仍在查找它并导致此错误。

我从文件系统中删除了Global.ASAX和GLobal.asax.cs,并确实解决了该错误。


谢谢,这是为我解决的,但是我也想在将来为其他人添加,就我而言,我从未将Global.asax添加到我的项目中。但是正如这里提到的,global.asax和global.asax.cs文件在我的文件系统中。当我删除它们时,错误消失了。
stackonfire

1

进入开发游戏已有近20年的时间,这个栗子继续困扰着我多个项目。

因此,今天,在针对另一个项目再次遇到相同问题的同时,我决定进一步研究,我相信这与Bin文件夹的位置有关……或更具体地说,与bin文件夹的输出路径有关。

对我来说,对于配置为通过IIS运行/调试的基于服务的简单Web应用程序,它将输出路径从bin \ debug更改为bin \即可解决该问题

项目>属性>构建>输出路径

认真地希望这会有所帮助。


0

我对同样的问题感到迷惑。我试图删除和global.asax(在添加之前关闭了VS2010)。清理了项目/解决方案,检查了Web应用程序配置中是否有任何更改以及在SO线程中对其他人有用的其他内容。我终于清理了解决方案,删除了bin / obj文件夹,并停止了所有正在运行的VS2010开发服务器,然后我将所有更改还原回去,发现应用程序再次运行。我重做了同样的事情,现在工作正常。

再次发生,这一次解决方案为我工作。


0

转到解决方案属性下的Configuration Manager。然后确保所有项目都已建立,这不会有问题。


0

我不得不从磁盘中删除(重复)未包含在项目中的文件。看起来重复项是由重命名失败引起的。文件名不同,但是代码相同。

删除所有oof。*文件后,我即可进行扫描。

  • foo.aspx
  • foo.aspx.cs
  • foo.aspx.designer.cs
  • oof.aspx
  • oof.aspx.cs
  • oof.aspx.designer.cs

0

就我而言,是IISExpress指向与IIS相同的端口来解决它

C:\Users\Your-User-Name\Documents\IISExpress\config\applicationhost.config

并搜索端口,您将找到<site>...</site>需要删除或注释的标签


0

仅在生产服务器上进行部署时遇到此问题。在我的其他环境中,它可以正常工作...我只是删除了bin文件夹中的内容,然后重新发布,之后便可以正常工作。


0

如果您使用的是Visual Studio,则可能是在尝试以发布模式执行应用程序,然后尝试将其更改为调试模式。


0

我试图重建解决方案并清除ASP.NET临时文件,但未成功。
但是运行IISRESET后,错误消失了。

更新:1个月后,我再次遇到相同的问题。我注意到MyWebsite.DLL存在于bin文件夹中,但在临时ASP.NET文件(C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET文件)中不存在。我已经尝试过一些建议,但在Global.asax问题中(“我实际上忘记了自己的答案”)和“解析器错误消息:无法加载类型”中提出了建议,但该错误仅在IISRESET之后才消失了



0

只是想加我两美分。我收到了同样的错误,并且尝试了所有建议,但均无济于事。我的情况可能有所不同?

事实证明,自动生成的“ AssemblyInfo.cs”文件有一些多余的空间,这使我无法启动Web应用程序(通过调试)。该文件的外观如下:

[assembly: AssemblyTitle("WebApplication2")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("

            ")]
[assembly: AssemblyProduct("WebApplication2")]
[assembly: AssemblyCopyright("Copyright © 

             2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

在杀死AssemblyCompany和AssemblyCopyright中的空间之后,我终于能够构建并启动该项目。

在以下环境中观察到:--Visual Studio 2017社区版本15.3.0 --Win 7 x64 Enterprise-新项目> Visual C#> Web> ASP.NET Web应用程序> Web窗体

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.