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

我在App_Code上创build了一个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,所以我不知道还有什么要做,所有的search返回ASP.NET 1-2的结果,已经过时了,甚至不存在razor,所以我不知道怎么可以我解决这个问题。

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

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

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

ASP.NET和Web开发

  • 当您创build一个Web窗体4.5 WAP并打开一个Web窗体页,您会收到错误列表窗口中的以下错误:

  • 该项目将运行没有任何问题。 错误CS0234名称空间“ASP”中不存在types或名称空间名称“global_asax”(缺less程序集引用吗?)错误CS0234命名空间“System”中不存在types或名称空间名称“Linq”缺less程序集引用?)假定您在Visual Studio 2015 RC中使用C#和VB的新语言function。 您在Web窗体页面或Razor视图中使用C#或VB时收到一个运行时错误。

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

我遇到过同样的问题。

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

我不知道这是为什么发生。

我发现,如果我在运行构build时在Visual Studio 2015中打开了App_Code的文件,那么我不会收到错误。 只要我closures文件错误再次出现。

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

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

在此之后,我有很多与T4MVC错误,我也使用,我升级到最新版本,但我可以看到,在T4MVC的安装目标框架4.5的源代码pipe理,当你重新安装一个新的NuGet包它改变了目标框架,所以改为4.5.1

之后,这一切工作。 我没有testing,如果你只需要做这个答案的第二部分,但我会先尝试。

我解决这个错误的方式是将我的代码格式Global.asax.cs移动到Startup.cs并删除Global.asax,以便我的项目中没有任何代码隐藏文件。 看到这个问题的更多信息。

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

放在App_Code文件夹中的代码有点不同,它在运行时被编译。 cshtml文件是'内容',这可能是你得到错误的原因。 在你的项目中创build普通的文件夹名称代码或类似的东西(但不是App_Code),并把你的文件放在那里。