我在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(以防它重要)
答案 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),并将文件放在那里。