Visual Studio 无法从 global.asax 加载类型



我知道以前有人提出过这个问题,但可用的解决方案并没有解决我的问题。

在我的解决方案中,我有一个没有编写的 global.asax 文件。cs 文件中的命名空间和类与继承命名空间和类匹配。

导致问题的原因很简单:我从解决方案中排除了一个目录,然后重新包含它。从那时起,当我尝试构建解决方案时,会出现以下错误:

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 'EnableWebApp.Global'.
Source Error: 
Line 1:  <%@ Application Codebehind="Global.asax.cs" Inherits="EnableWebApp.Global" Language="C#" %>
Source File: /global.asax    Line: 1

我已经清理、重建、重新安装了这些文件,重新启动了框架,并重新启动了我的系统。还没有解决任何问题。

全球 "<%@ Application CodeBehind="Global.asax.cs" inherits="EnableWebApp.Global" language="C#" %>"

全球.asax.cs 命名空间启用网络应用 { 公共类全局:System.Web.HttpApplication {

如果有人遇到此问题,有两个简单的解决方法:

  • 删除 Global.asax 并通过 Visual Studio 的 Add -> New Item 功能添加一个新项,它将添加正确的命名空间/类型组合
  • 确保Inherits部分与项目的命名空间以及Global类型完全匹配。右键单击项目属性以检查命名空间。 因此,如果您的应用程序的命名空间是MyProject.Web,您应该在此处Inherits="MyProject.Web.Global"

在过去的两天里,我一直在与这个错误作斗争。 这是我的场景以及我如何解决它。 (我用VB编码......不如你们大多数人和女孩先进。

1) 我将 Web 代码文件夹添加到我的项目中。

2)我创建了一个动态数据实体,该实体创建了包含公共类CEPTEntities的model1.vb文件

3)我根据找到的指令设置了Global.asax文件路由。 DefaultModel.RegisterContext(GetType(CEPSEntities), new ContextConfiguration() with _{.脚手架所有表 = 真})

3a) CEPS是我的数据实体模型的名称。然后我验证了我的 web.config 文件中的连接字符串是否正确

4)然后我打开modle1.vb文件的属性,并将构建操作从内容(也是默认的)更改为编译。

5)然后做了一个清理和重建,我的应用程序终于在IE中打开了。

希望这能为其他人省去很多麻烦。

右键单击您的 Web 项目,转到"属性",并检查程序集名称和根命名空间是否为"EnableWebApp"

global.asax 实际上附加了 2 个文件,一个标记和一个代码隐藏。
如果您右键单击该文件,您可以选择查看标记,我猜该行中的某处存在命名空间或名称不匹配。
如果没有,您可以发布您的global.asax.cs和标记(应该只有1个文件)吗?

编辑:
我没有立即解释你为什么得到这个结果。
您可以使用 dll 反射器程序扫描网站的 dll 以查找全局类型及其命名空间以验证它是否正确构建到 dll 中吗?
您可以使用此程序:下载ILSpy的链接

如果您使用的是"本地 IIS"并且您的编译路径不是"bin/debug"......

在我看来,IIS 更改了调试下应用程序的物理路径。这发生在关闭/重新打开 VS 并使用 GIT 更改分支时。因此,请仔细检查您的IIS应用程序配置是否保持正确,以防修复它。最后,解决这个烦人问题的解决方法是在我的解决方案中添加一个简单的 consol 项目,该项目作为构建后事件编译和启动,以在 IIS 中自动设置正确的路径:

    static int Main(string[] args)
    {
        int result = 0;
        try
        {
            ServerManager serverManager = new ServerManager();
            var myApp = serverManager.Sites["Default Web Site"].Applications["/myApp"].VirtualDirectories[0];
            myApp.PhysicalPath = args[0];
            serverManager.CommitChanges();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
            result = -1;
        }
        return result;
    
    }

另一个对我有用的解决方案包括被视为主解决方案子项的建筑项目。我打开了与 .NET 网站链接的 .csproj 文件,编译了这个项目,然后重新打开了主解决方案。上一个错误消失了。

最新更新