如何使Visual Studio“编译” .aspx文件?

sha*_*oth 5 .net asp.net asp.net-mvc visual-studio

在我的ASP.NET MVC应用程序中,我有一个.aspx文件。我在Visual Studio 2010项目资源管理器树中选择它,然后转到文件属性-“构建操作”设置为“内容”。我将“生成操作”更改为“编译”,并要求Visual Studio生成项目。在编译器输出中,我的.aspx文件收到以下错误消息:

C:\PathToProject\MyFile.aspx(1,1): error CS0234: The type or namespace name 'global_asax'
    does not exist in the namespace 'ASP' (are you missing an assembly reference?)
Run Code Online (Sandbox Code Playgroud)

.aspx文件的第一行是:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/My.Master" Inherits="System.Web.Mvc.ViewPage" %>
Run Code Online (Sandbox Code Playgroud)

这让我纳闷...

编译器试图抱怨什么?如何使它编译.aspx文件?

dev*_*vio 5

视图的 .aspx 必须将其构建操作设置为内容。

要在构建时启用预编译(或至少编译器错误检查),请添加

    <MvcBuildViews>true</MvcBuildViews>
Run Code Online (Sandbox Code Playgroud)

到 .csproj 中的第一个 <PropertyGroup>。

  • 这不会预编译,这只会验证页面。 (2认同)

Dai*_*Dai 1

正如 @KennyZ 所说,ASPX/ASCX/Master/CSHtml 文件没有“编译” - 无论如何也不作为常规构建过程的一部分。这是因为这些文件在第一次请求时被编译成 Page 类,这是为了允许网站管理员随时修改文件,这通常来说是一个好主意,特别是当 ASPX 文件包含大量内容时。

请注意,VS 文件属性构建操作不控制此设置 - 我认为该BuildAction属性应该隐藏或至少更好地记录 - 开发人员社区并没有很好地理解它。

但这是可以完成的!在 VS2005 中,当他们引入命运多舛的“网站”项目(作为 VS2003“Web 应用程序”的替代品,直到 VS2005 SP1 发布)时,有一个选项可以将 ASPX/ASCX/Master 文件预编译到应用程序的程序集中 -它确实留下了不包含任何内容的存根 *.aspx 文件,而是引用了预编译的页面类。

您仍然可以使用 VS2010 执行此操作,但您需要使用命令行aspnet_compiler.exe作为 GUI,因为 Web 应用程序项目不存在命令行。

这里有更多文档:http://msdn.microsoft.com/en-us/library/bb398860%28v=vs.100%29.aspx

在这里:http ://msdn.microsoft.com/en-us/library/ms229863%28v=vs.100%29.aspx