为什么我不能发布MVC项目

Vnu*_*nuk 7 asp.net-mvc publish

我在发布我的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]
Run Code Online (Sandbox Code Playgroud)

奇怪的是,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 =""})
Run Code Online (Sandbox Code Playgroud)

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

更新 - 我创建了一个新的MVC项目,并将所有文件添加到其中.引用项目已被引用为已编译的二进制文件.发布"只运行应用程序所需的文件"后,我得到了同样的错误.

Vnu*_*nuk 1

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

我的主代码隐藏文件被声明为 Partial 而不是 Public,我的主定义是

<%@ Master Language="VB" Inherits="SiteFrontPageMaster"  ClassName="SiteFrontPageMaster" CodeFile="SiteFrontPageMaster.Master.vb"  %>
Run Code Online (Sandbox Code Playgroud)

本来应该是

<%@ Master Language="VB" Inherits="mymvcproject.SiteFrontPageMaster" CodeBehind="SiteFrontPageMaster.Master.vb" %>
Run Code Online (Sandbox Code Playgroud)

为什么 Cassini 可以接受而不是 IIS 可以接受的东西超出了我的理解能力。我只是希望这个答案能减轻其他人的头痛。