visual-studio-2010 – 将ASP.NET MVC 2部署到面向.NET 3.5的IIS 7.5

我在Visual Studio 2008中创建了一个ASP.NET MVC 2应用程序.我将发布版本设置为通过ASP.NET编译器预编译所有视图,缩小Javascript和CSS,清理web.config等.自生产以来部署将转到IIS6服务器,我在Windows 7计算机上设置了伪生产部署,以使应用程序池以经典模式运行,目标是2.0运行时.我在web.config中设置了无扩展处理程序,这是必要的,一切都很好.

问题出现在我将解决方案升级到Visual Studio 2010时.我仍然以3.5框架为目标,但现在我正在使用MSBuild 4.0,因为这是Visual Studio 2010使用的.一切仍然正确编译,因为它在Cassini下运行正常,但是当我将它部署到同一位置(相同的应用程序池,身份等)时,它现在表现不同.我仍然在web.config中有无扩展名处理程序,但是现在当我导航到应用程序的根目录时它会进行目录浏览,而现在处理的任何路由现在都会返回,因为IIS中的StaticFile处理程序正在处理404错误.我不知道改变了什么,导致了休息.

我查看过this question,但我已经确认已安装所有必备组件.

最佳答案
您是否尝试使用服务器上的Phil Haack route debugger调试路由?

编辑:
在IIS 7.5上,您不需要任何特殊的无扩展处理程序,这是自动处理的,您不需要更改任何内容.据我所知,它只在IIS 6上是必要的.
这可能是问题吗?如果删除该特殊处理程序怎么办?也许这就是阻止它开启路线引擎的原因.

编辑:
我仔细检查过,正如我想的那样,从IIS7开始,AppDomain的默认模式是集成模式.这意味着Asp.net堆栈会在每次请求时启动,而在经典模式下,只有当调用的特定扩展(aspx ashx axd默认映射到aspnet_isapi过滤器)时才会调用asp.net.
UrlRoutingModule在每个请求都没有任何要求,因为它是一个HttpModule而不是Handler. (它只需要在应用程序的配置文件中注册,无需将其映射到扩展,但默认情况下,这是在MVC应用程序中.您可以打开Web.Config文件并验证您是否在节点下

<modules runAllManagedModulesForAllRequests ="true">
...
<add name="UrlRoutingModule" type=.../>
</modules>

您确定将MVC程序集部署到服务器吗?
检查System.Web.Mvc,System.Web.Routing和System.Web.Abstraction引用是否将Copy Local属性设置为true,以确保在本地和生产服务器上使用相同的程序集…

如果一切正确,我不知道如何帮助你…我希望这会对你有所帮助,或者至少让你走上正轨.

编辑:
噢……刚读完你的最后一条评论……抱歉,我错过了关于经典模式的元素.你的标题提到了IIS7.5,我假设了太多东西.这就是为什么我感到困惑.

现在,我必须看看史蒂文桑德森的书.他有一个用于解决IIS6部署问题的清单.
我知道你说这只是在使用MSBuild 4失败时,但它可能仍然有用

检查Default.aspx是否设置为默认内容页面.这可能是404的来源.

然后有无扩展的URL,上次我部署到IIS6我使用了一个简单的通配符地图,我从来没有遇到过问题……
如果你仍然有麻烦抱歉我无法帮助…不是我没有尝试:)祝你好运

转载注明原文:visual-studio-2010 – 将ASP.NET MVC 2部署到面向.NET 3.5的IIS 7.5 - 代码日志