Как сделать Visual Studio "скомпилировать" файл.aspx?

В моем приложении ASP.NET MVC у меня есть файл.aspx. Я выбираю его в дереве обозревателя проектов Visual Studio 2010 и перехожу к свойствам файла - "Действие построения" установлено в "Содержимое". Я изменяю "Build Action" на "Compile" и прошу 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?)

Первая строка файла.aspx:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/My.Master" Inherits="System.Web.Mvc.ViewPage" %>

что заставляет меня задуматься...

На что компилятор пытается пожаловаться и как мне заставить его скомпилировать файл.aspx?

2 ответа

В представлении.aspx должно быть установлено действие сборки для содержимого.

Чтобы включить предварительную компиляцию (или, по крайней мере, проверку ошибок компилятора) во время сборки, добавьте

    <MvcBuildViews>true</MvcBuildViews>

к первой в вашем.csproj.

Как говорит @KennyZ, ASPX/ASCX/Master/CSHtml файлы не "компилируются" - во всяком случае, не как часть обычного процесса сборки. Это связано с тем, что эти файлы скомпилированы в классы страниц по первому запросу, что позволяет веб-мастерам изменять файлы на ходу, что, как правило, является хорошей идеей, особенно если файлы ASPX содержат много контента.

Обратите внимание, что действие по созданию свойств файла VS не контролирует этот параметр - я думаю, BuildAction свойство должно быть скрыто или, по крайней мере, лучше задокументировано - оно не очень хорошо понято сообществом разработчиков.

Но это может быть сделано! В VS2005, когда они представили неудачные проекты "веб-сайтов" (в качестве замены VS2003 "Веб-приложения" до выхода VS2005 SP1), была возможность предварительно скомпилировать файлы ASPX / ASCX / Master в сборку приложения - он оставил позади заглушки *.aspx файлы, которые не содержали никакого содержимого, но вместо этого ссылались на предварительно скомпилированные классы страниц.

Вы все еще можете сделать это с VS2010, но вам нужно использовать командную строку aspnet_compiler.exe поскольку GUI для этого не существует для проектов веб-приложений.

Дополнительная документация доступна здесь: 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

Другие вопросы по тегам