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

时间:2015-02-14 07:35:41

标签: c# asp.net asp.net-mvc razor

我在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(以防它重要)

9 个答案:

答案 0 :(得分:45)

经过进一步调查后,我发现这是一个众所周知的问题。

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

ASP.NET和Web开发

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

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

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

答案 1 :(得分:19)

我有同样的问题。

我手动编辑了生成的文件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));
    }
}

我不知道为什么会发生这种情况。

答案 2 :(得分:14)

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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

我做的两件事就是重新定位框架,然后将其更改回来(使用4.5.1将其更改为4.5并返回)

在此之后,我在使用的T4MVC上出现了很多错误,我将其升级到最新版本,但我可以看到在源代码管理中安装了针对框架4.5的T4MVC以及重新安装新的nuget包时它改变了目标框架,因此改为4.5.1

在此之后一切正常。我没有测试你是否只需要做这个答案的第二部分,但我会先尝试一下。

答案 5 :(得分:1)

只需右键单击您的解决方案项目,然后单击清洁即可。我已经做到了,并且为我工作了。我之所以分享此内容,是因为它知道如果它有助于他人,那么就会帮助我。

答案 6 :(得分:0)

我解决此错误的方法是将我的代码从Global.asax.cs移动到Startup.cs并删除Global.asax,以便我的项目中没有任何代码隐藏文件。有关详细信息,请参阅this question

答案 7 :(得分:0)

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

答案 8 :(得分:-2)

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

相关问题