代码之家  ›  专栏  ›  技术社区  ›  Vnuk

为什么我不能发布MVC项目

  •  7
  • Vnuk  · 技术社区  · 15 年前

    我在发布我的MVC项目时遇到问题。当我发布所有内容并将其上载到Web服务器时,我会得到:

    [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在那里找不到它。如果我将整个项目复制到Web服务器上,让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 =""})
    

    我正在Windows 2008 Web服务器上使用iis7。ASP.NET MVC 1.0,Visual Studio 2008。我在Windows7上用iis7在本地尝试过-同样的错误。

    更新 -我创建了一个新的MVC项目,并将所有文件添加到该项目中。引用项目被引用为已编译的二进制文件。在发布“仅运行应用程序所需的文件”之后,我会得到相同的错误。

    8 回复  |  直到 14 年前
        1
  •  1
  •   Vnuk    14 年前

    这个问题的解决方案和它的表现一样离奇。

    我的主代码隐藏文件被声明为部分而不是公共的,我的主定义是

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

    本来应该是

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

    为什么卡西尼可以接受的东西,而不是IIS是我无法理解的。我只希望这个答案能帮别人减轻我的头痛。

        2
  •  0
  •   Branislav Abadjimarinov Ivan Choo    15 年前

    检查index.aspx的母版页是否也存在。
    如果使用“网站”项目,请在发布网站时尝试选择“允许此预编译网站可更新”选项。
    如果您正在使用“Web应用程序”项目,请尝试在发布时选择“复制所有项目文件”选项。

    也尝试只复制视图。我认为预编译后的ASP.NET MVC项目不能很好地工作,因为标记文件(预编译时.aspx和ascx文件被标记文件替换)。

    如果您使用的是IIS 6或更低版本,请检查ASP.NET MVC的部署指南。- http://www.asp.net/learn/mvc/tutorial-08-cs.aspx .

        3
  •  0
  •   Victor Gelmutdinov    14 年前

    1)检查index.aspx是否包含在项目中。(存在于“发布结果”文件夹中)在vs本地可能有效,但在发布时不会复制。

    2)检查项目中是否包含VIEWS/web.config文件-它影响WAS ASP.NET MVC编译视图。

    3)检查index.aspx是否具有build action=content(在属性窗口中)。

        4
  •  0
  •   Paul    14 年前

    检查服务器上的权限,确保ASP.NET工作进程对VIEWS文件夹、子文件夹和文件具有正确的权限。

    另外,您的IIS实例是在经典或集成管道模式下运行的吗?

        5
  •  0
  •   Dax70    14 年前

    删除了前一个链接,这个链接解释得更好 http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis7/ .

    如果要使用本地ASP.NET Webdev服务器进行开发,必须删除一些httphandler和httpmodules,然后将它们添加回该部分。这告诉iis7在集成模式下运行它们。将应用程序部署到包括MVC在内的IIS 7服务器时需要这样做。参考示例如下:

    <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>
    

    希望能有所帮助,

    涡流

    老链接 http://www.asp.net/(S(ywiyuluxr3qb2dfva1z5lgeg))/learn/mvc/tutorial-08-cs.aspx

        6
  •  0
  •   ollifant    14 年前

    您使用的查看(“index”,……)的确切调用是什么? 也许第二个参数是一个字符串——在本例中,使用了视图方法的另一个重载,其中第二个参数是母版页的名称。

    解决方案:只需将第二个参数转换为对象。

        7
  •  0
  •   Clownish Carnage    14 年前

    既然它在复制整个项目时有效,那么您可能没有复制所有需要的文件?确保将任何非标准引用设置为 复制本地 使用内置的 出版 功能位于 建造 获取项目运行所需的文件的菜单。

        8
  •  -1
  •   Mad Halfling    14 年前

    例如,尝试将.aspx附加到URL的控制器部分 http://myserver/appname/Index.aspx/Home -如果我没记错的话,iis7对于MVC应用程序有问题,除非你 a)使用.aspx后缀引用控制器部件 b)调整服务器上的设置,但这会影响该服务器上的所有应用程序。 c)加载加载项 我找到了一篇关于这个的好文章,但是我找不到它,四处搜索,我相信如果.aspx解决方案不适合你,你会自己找到它的。