Почему я не могу опубликовать проект MVC

У меня есть проблемы при публикации моего проекта MVC. Когда я действительно публикую и загружаю все на веб-сервер, я получаю это:

[InvalidOperationException: The view 'Index' or its master could not be found. The following locations were searched:
~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx]

Странная вещь состоит в том, что Index.aspx существует в ~/Views/Home/, но IIS не может найти его там. Если я копирую весь проект в веб-сервер и позволяю asp.net скомпилировать его на лету, он работает как очарование.

Мой код маршрутизации:

  routes.MapRoute( _
    "Default", _
    "{controller}/{action}/{id}", _
    New With {.controller = "Home", .action = "Index", .id = ""} _
  )

  routes.MapRoute("Root", "", New With {.controller = "Home", .action = "Index", .id =""})

Я использую IIS7 в Windows 2008 Web server. ASP.NET MVC 1.0, Visual Studio 2008. Я попробовал его локальный IIS7 в Windows 7 - та же ошибка.

ОБНОВЛЕНИЕ - я создал новый проект MVC и добавил все мои файлы к нему. На ссылающиеся проекты сослались как скомпилированные двоичные файлы. После публикации "только файлы должны были запустить приложение", я получаю ту же ошибку.

7
задан Vnuk 27 March 2010 в 19:09
поделиться

8 ответов

Решение этой проблемы столь же причудливо, как и проявление.

Мой главный код файла был объявлен как Partial, а не Public, и мое основное определение было

<%@ Master Language="VB" Inherits="SiteFrontPageMaster"  ClassName="SiteFrontPageMaster" CodeFile="SiteFrontPageMaster.Master.vb"  %>

, и оно должно было быть

<%@ Master Language="VB" Inherits="mymvcproject.SiteFrontPageMaster" CodeBehind="SiteFrontPageMaster.Master.vb" %>

Почему что-то было приемлемым для Cassini, а не для IIS, мне непонятно. Я просто надеюсь, что этот ответ избавит кого-то от моей головной боли.

1
ответ дан 8 December 2019 в 01:44
поделиться

Проверьте, существует ли Masterpage index.aspx.
Если вы используете проект «Веб-сайт», попробуйте выбрать опцию «Разрешить этому предложенному сайту обновлять» при публикации сайта.
Если вы используете проект «Web Application», попробуйте выбрать опцию «Копировать - все файлы проекта» на публикации.

Постарайтесь скопировать только представления. Я думаю, что проекты ASP.NET MVC при предложении не работают хорошо из-за файлов маркеров (файлы .aspx и ASCX заменены файлами маркеров на преправдации).

Если вы используете IIS 6 или ниже, проверьте руководство по развертыванию для ASP.NET MVC - http://www.asp.net/learn/mvc/tutorial-08-cs.aspx .

0
ответ дан 8 December 2019 в 01:44
поделиться

1) Проверьте, включен ли ваш Index.aspx в проект. (существует в папке результатов публикации) Локально в VS это может работать, но при публикации не будет скопировано.

2) Проверьте, включен ли файл Views / web.config в проект - это влияет на то, как ASP.NET MVC компилирует представления.

3) Убедитесь, что в Index.aspx указано Build Action = Content (в окне свойств).

0
ответ дан 8 December 2019 в 01:44
поделиться

Проверьте права на сервере, убедитесь, что рабочий процесс asp.net имеет правильные права на папку views, вложенные папки и файлы.

также, работает ли ваш экземпляр IIS в режиме Classic или Integrated Pipeline?

.
0
ответ дан 8 December 2019 в 01:44
поделиться

Удалена предыдущая ссылка, эта объясняет ее немного лучше http: //learn.iis. сеть / page.aspx / 243 / aspnet-integration-with-iis7 / .

Если вы разрабатываете с использованием локального сервера веб-разработки asp.net, вы должны удалить некоторые из HttpHandlers и HttpModules, а затем добавить их обратно в раздел. Это указывает IIS7 запускать их в интегрированном режиме. Это необходимо при развертывании вашего приложения на сервере IIS 7, в том числе для MVC. См. Ниже в качестве справочного примера:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="ScriptModule" />
      <remove name="UrlRoutingModule" />
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </modules>
<handlers>
  <remove name="WebServiceHandlerFactory-Integrated" />
  <remove name="ScriptHandlerFactory" />
  <remove name="ScriptHandlerFactoryAppServices" />
  <remove name="ScriptResource" />
  <remove name="MvcHttpHandler" />
  <remove name="UrlRoutingHandler" />
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
          <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
          <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </handlers>
      </system.webServer>

Надеюсь, что это поможет,

Эдди

PS. Старая ссылка http://www.asp.net/ (S (ywiyuluxr3qb2dfva1z5lgeg)) /learn/mvc/tutorial-08-cs.aspx

0
ответ дан 8 December 2019 в 01:44
поделиться

Попробуйте добавить .aspx к части URL контроллера, например http://myserver/appname/Index.aspx/Home - если я правильно помню, IIS7 имеет проблемы с MVC приложениями, отображающими URL контроллера/действия должным образом, если вы не будете a) ссылаться на часть контроллера, используя суффикс .aspx b) изменить настройки на сервере, но это повлияет на все приложения на этом сервере c) загружаете аддон. Я нашел хорошую статью об этом, но не могу ее найти, поищите, и я уверен, что вы найдете ее сами, если решение с .aspx вам не подходит

.
-1
ответ дан 8 December 2019 в 01:44
поделиться

Каков точный вызов View ("Индекс ", ...) вы используете. Возможно, второй параметр является строкой - в этом случае используется другая перегрузка View-метода, где второй параметр - это имя главной страницы.

Решение: просто введите второй параметр как объект.

0
ответ дан 8 December 2019 в 01:44
поделиться

Поскольку он работает при копировании всего проекта, возможно, вы не копируете все файлы, которые вам нужны? Убедитесь, что для всех нестандартных ссылок установлено значение Копировать локально , и используйте встроенную функцию Опубликовать в меню Сборка , чтобы получить файлы, необходимые для проекта. бежать.

0
ответ дан 8 December 2019 в 01:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: