“命名空间 ASP 中不存在 ASP.global_asax”

Posted

技术标签:

【中文标题】“命名空间 ASP 中不存在 ASP.global_asax”【英文标题】:"ASP.global_asax does not exist in the namespace ASP" 【发布时间】:2015-04-15 07:37:01 【问题描述】:

我在 App_Code 上创建了一个 RazorFunctions.cshtml 文件

@functions 
    public static string GetActiveClassIf(string controllerName, string actionName = null)
    
        var routeData = @HttpContext.Current.Request.RequestContext.RouteData;
        string currentController = routeData.Values["controller"].ToString();
        string currentAction = routeData.Values["action"].ToString();
        return controllerName == currentController &&
            (String.IsNullOrEmpty(actionName) || currentAction == actionName) ? "active" : "";
    

当我编译时,它给了我 2 个错误(编译成功并且站点工作没有问题)但是这些错误很烦人。

RazorFunctions.cshtml 作为内容(尝试编译但当然不适用于 cshtml 文件)

Global.asax.cs 是:

public class MvcApplication : System.Web.HttpApplication

    protected void Application_Start()
    
        AreaRegistration.RegisterAllAreas();
        ModelMetadataConfig.RegisterModelMetadata();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
        //Database.SetInitializer(new DropCreateDatabaseAlways<ApplicationDbContext>());
    

<%@ Application Codebehind="Global.asax.cs" Inherits="Bouron.Web.MvcApplication" Language="C#" %>

这是我第一次使用 App_Code 所以我不知道还能做什么,所有搜索都返回 ASP.NET 1-2 结果,已经过时了,剃须刀甚至不存在,所以我不是确定我该如何解决这个问题。

我正在使用 Visual Studio 2015(以防万一)

【问题讨论】:

您找到解决方案了吗?遇到了同样的问题。 我遇到了同样的问题,手动编辑了生成的文件file.cshtml.72cecc2a.cs 并将ASP.global_asax 更改为System.Web.HttpApplication 并且错误消失了......不知道为什么会这样跨度> @OrlandoWilliam 您可以将其发布为答案。因为确实这也解决了我的问题,所以我可以接受。谢谢 我已经放弃了阻止“错误”出现的尝试。不知道有没有办法抑制CS0234? 【参考方案1】:

经过进一步调查,我发现这是一个已知问题。

来源:https://support.microsoft.com/en-us/kb/3025133

ASP.NET 和 Web 开发

当您创建 Web 表单 4.5 WAP 并打开 Web 表单页面时,您会在“错误列表”窗口中收到以下错误:

项目将毫无问题地运行。错误 CS0234 名称空间“ASP”中不存在类型或名称空间名称“global_asax”(您是否缺少程序集引用?) 错误 CS0234 命名空间“System”中不存在类型或命名空间名称“Linq”(您是否缺少程序集引用?) 假设您在 Visual Studio 2015 RC 中使用 C# 和 VB 的新语言功能。在 Web 表单页面或 Razor 视图中使用 C# 或 VB 时会收到运行时错误。

要解决此问题,请安装 Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet 包。此包将用基于 Roslyn 的提供程序替换 ASP.NET 的内置 CodeDom 提供程序。

【讨论】:

无论出于何种原因,我还必须打开它在 Visual Studio 中引发错误的文件,以使其停止显示在错误列表中。就像智能感知在我打开文件之前没有重新考虑它一样。 我需要在安装上述软件包后重新启动 VS2015 RTM 才能修复此问题。 这对我有用。但是在安装 DotNetCompilerPlatform 之后,我开始收到有关无效路径的 NuGet 错误。如果您遇到同样的问题,这里是解决方案:***.com/a/31826795/573208 这对我不起作用 - 我仍然必须打开帮助文件,否则即使在安装推荐的 nuget 包之后也会出现错误。很烦人。 答案中引用的来源是 Visual Studio 2015 RC。我正在使用 VS 2015 Update 1 并看到 global_asax 错误,但没有看到 Linq 错误。遗憾的是,NuGet 包并没有摆脱global_asax 错误。【参考方案2】:

我遇到了同样的问题。

我手动编辑了生成的文件file.cshtml.72cecc2a.cs(它位于AppData\Local\Temp\Temporary ASP.NET Files\root)并将ASP.global_asax更改为System.Web.HttpApplication,错误消失了。

这是生成的代码:

protected static ASP.global_asax ApplicationInstance 
    get 
        return ((ASP.global_asax)(Context.ApplicationInstance));
    

我改成:

protected static System.Web.HttpApplication ApplicationInstance 
    get 
        return ((System.Web.HttpApplication)(Context.ApplicationInstance));
    

我不知道为什么会这样。

【讨论】:

这可行,但更新文件后问题再次出现。请参阅我的解决方案答案,这是 Visual Studio 2015 的一个已知问题 有人知道为什么会这样吗?这是对我真正有用的所有解决方案中唯一的解决方案【参考方案3】:

我发现,如果我在运行构建时在 Visual Studio 2015 中打开了 App_Code 中的文件,那么我不会收到错误消息。一旦我关闭文件,错误就会再次出现。

【讨论】:

对我来说正好相反。如果文件打开它告诉我它找不到 system.Web.Mvc,如果它关闭它找到它。 我有 1 个 cshtml (Content.cshtml) 文件,但我无法在 VS15 中打开它,不知道为什么(“操作无法完成”)。我已将其重命名为 Content.cshtml.old 但这会导致另一个问题。最后,我删除了 App_Code 文件夹并创建了一个新文件夹。重新打开了视觉工作室,它现在可以工作了。【参考方案4】:

在尝试了这里提出的各种解决方案后,结果证明只需退出 Visual Studio 2015 然后重新启动它就足以让解决方案/项目再次成功编译。

【讨论】:

简单地重新启动 Visual Studio 也对我有用。我在构建时记录了其中的 7 个错误,并且在重新启动 VS 后构建成功。嗯。至少是一个幸福的结局,但一个挥之不去的“为什么?”持续存在。【参考方案5】:

我为解决此问题所做的两件事是重新定位框架,然后将其改回(使用 4.5.1 将其更改为 4.5 并返回)

在此之后,我在使用 T4MVC 时遇到了很多错误,我将其升级到最新版本,但我可以看到在源代码控制中,T4MVC 是针对框架 4.5 安装的,并且当您重新/安装新的 nuget 包时它更改了目标框架,因此更改为 4.5.1

在此之后一切正常。我没有测试您是否只需要执行此答案的第二部分,但我会先尝试。

【讨论】:

【参考方案6】:

我解决此错误的方法是将我的代码表单 Global.asax.cs 移动到 Startup.cs 并删除 Global.asax,这样我的项目中就没有任何代码隐藏文件。请参阅this question 了解更多信息。

【讨论】:

【参考方案7】:

我为我的 Web 项目安装了 Microsoft.CodeDom.Providers.DotNetCompilerPlatform,然后删除了该包。错误消失了。

【讨论】:

【参考方案8】:

只需右键单击您的解决方案项目并单击 CLEAN。我已经这样做了,它确实对我有用。我分享这个是因为谁知道它是否能帮助其他人喜欢它帮助我。

【讨论】:

【参考方案9】:

App_Code 文件夹中的代码处理方式略有不同,它是在运行时编译的。 cshtml 文件是“内容”,因此这可能是您收到错误的原因。在您的项目中创建普通文件夹,将其命名为 Code 或类似名称(但不是 App_Code)并将您的文件放在那里。

【讨论】:

但如果我将它从App_Code 中取出,它将不会在我的 Razor 页面上被识别,因为来自 docs 的 @functions 要“共享”应该位于该文件夹中。从该文件夹中删除以 The name 'RazorFunctions' does not exist in the current context 结束。 已确认...无需执行任何其他复杂操作,只需将所述文件从 App_Code 中移动,该文件试图向应用程序的其他区域提供额外的显示帮助程序不再可用,并且当一个错误被抛出时尝试访问关联的“DisplayHelper”类。

以上是关于“命名空间 ASP 中不存在 ASP.global_asax”的主要内容,如果未能解决你的问题,请参考以下文章