У меня есть проект ASP MVC 4. Он запускался как MVC 1, поэтому он использует представления ASPX/ASCX в старом стиле. Я хочу, чтобы представления компилировались во время сборки, в основном для проверки ошибок времени компиляции (а также, что важно, чтобы ошибки отображались непосредственно в Visual Studio). Я разрабатываю Visual Studio Pro 2015 с использованием IIS Express в качестве сервера отладки.Ошибка при попытке создания ASP MVC Просмотров во время сборки
Согласно как msdn, Haacked и вопросы здесь, такие как this я поставил следующий мой .vbproj:
<MvcBuildViews>true</MvcBuildViews>
, а также в моей .vbproj создали задачу
<Target Name="BuildViews" Condition="'$(MvcBuildViews)'=='true'" AfterTargets="Build">
<Message Importance="normal" Text="Precompiling views" />
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
Однако, что дает мне ошибку при попытке построить:
'/ temp' не является действительным приложением IIS.
В файле он просто ссылается ASPNETCOMPILER
Я пробовал различные варианты, как виртуальный_пути - Я проект настроен для работы в качестве поддиректории в разработчике /локальную поэтому я попробовал это, а имена сайтов из конфигурации в .vs-папке и ничего не работает.
Должен ли я изменить VirtualPath (и если да, к чему), или есть какая-то другая конфигурация отсутствует для темпа работать?
Редактировать
Кроме того, я получаю ту же ошибку запуска командной строки MSBuild. Для моих реальных производственных систем у меня есть скрипт, который выполняет сборку с использованием командной строки MSBuild, затем перемещает встроенный пакет на серверы продуктов и развертывает. Таким образом, когда он не будет создан, IIS express (или IIS работает) не будет. Вам нужен веб-сервер, связанный только для компиляции представлений?
Edit 2
Я смущен необходимостью для virtulPath здесь и очевидной связи с веб-сервером. Некоторые из предлагаемых решений включают настройку IIS. IIS Express (который я использую для отладки) даже не обязательно работает до после успешной сборки, как я ее понимаю? Во всяком случае, мое приложение работает в виртуальном каталоге довольно счастливо (/local в режиме отладки), но использование этого как значения не работает. Если это имеет значение, это соответствующая часть ApplicationHost.config в папке .vs в моем проекте (я пытался ставить одни и те же пути в applciationhost.config в документах/IIS Express):
<site name="CarWeb-Site" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Users\adam.conway\Documents\My Web Sites\CarWeb-Site" />
</application>
<application path="/local" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="filesystem path to my project" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:57047:localhost" />
<binding protocol="http" bindingInformation="*:57047:*" />
</bindings>
</site>
Я действительно не понимаю, почему просто VirtualPath="/"
не работает, так как это виртуальный путь, указанный в этих конфигурациях.
В то время как моя основная цель заключается в том, чтобы показывать ошибки в Visual Studio (и я согласен с ответом, ограниченным этим), это также случай, который я создаю для производственных сред с использованием MSBuild на машине, которая не обязательно IIS.
Создать каталог Temp в вашем решении с доступом для записи в процессе Dotnet. При создании проекта он создает временные файлы, и по ошибке он не может найти временный каталог/виртуальный путь. Как только он обнаружит, что есть доступ для записи, есть или нет. Надеюсь это поможет! – Amit
@Amit: Не работает. Пробовал. Не прося виртуальный путь. То есть как-то относительно URL-адреса? Я пытался использовать '$ (OutputPath)' как _VirtualPath_ (к которому он должен иметь доступ на запись, так как именно там он создает .dll), а также '$ (IntermediateOutputPath)' и получил ту же ошибку. (Ну, изменение пути: _ '/ bin /' не является допустимым приложением IIS._ и _ '/ obj/Debug /' не является действительным приложением IIS.) – Adam
Вместо IIS express вы можете попробовать с IIS и посмотрите, работает ли он? Проверьте, поддерживает ли этот параметр в IISExpress https://gist.github.com/paigecook/876258 – Amit