单步执行ASP.NET MVC 2源代码

时间:2010-06-27 09:13:20

标签: asp.net-mvc debugging asp.net-mvc-2

我一直在尝试设置ASP.NET MVC 2 RTM Source以便与我的应用程序一起使用,因此我可以在调试时逐步完成模型绑定等操作。但是,我无法让它工作 - 我收到的错误如下:

The type 'System.Web.Mvc.Controller' is defined in an assembly that is not referenced. 
You must add a reference to assembly 'System.Web.Mvc, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35'.

The type 'System.Web.Mvc.Async.AsyncControllerActionInvoker' is defined in an assembly that is not referenced. 
You must add a reference to assembly 'System.Web.Mvc, Version=2.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35'.

等等...

我按照Steve Sanderson's howto中的步骤(对于MVC1),但也许有不同的步骤让它在MVC2中工作?

到目前为止我采取的步骤:

  • 从我的所有项目中删除了对基于GAC的System.Web.Mvc dll的引用。
  • 在解决方案中添加了MVC源作为项目。
  • 在我的每个项目中添加了对System.Web.Mvc项目的引用。
  • 在根<add assembly="System.Web.Mvc...
  • <compilation><assemblies>部分注释掉web.config
  • <add assembly="System.Web.Mvc...文件夹中的web.config部分(以及每个区域的Views文件夹中)注释掉Views
  • 查找/替换System.Web.Mvc, Version=2.0.0.0的任何引用,并将PublicKeyToken值替换为null(原为31bf3856ad364e35)

所以,问题:

  • 还有其他人有这个工作吗? (大概是的!)
  • 错误中来自PublicKeyToken的数字在哪里?
  • 对于PublicKeyToken(31bf3856ad364e35),web.config(例如System.Web.Extensions)中的其他dll还有其他一些参考资料吗?
  • 知道我做错了什么?!我错过了哪些步骤?

谢谢!

更新 在回答Syd的问题时,这里有一些额外的信息:

1)来自web.config的当前程序集节点:

<compilation debug="true">
    <assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    </assemblies>
</compilation>

2)是的,我正在使用MVC Futures,但也在我的解决方案中构建了该项目,并引用它以在解决方案中使用System.Web.Mvc。

3)我使用了一些非标准的参考文献。相反,我会在这里列出截图:

Autofac
Autofac.Integration.Web
Autofac.Integration.Web.Mvc
Elmah
FluentValidation
FluentValidation.Mvc
log4net
MvcContrib
MySql.Data
NHibernate
MvcFutures

2 个答案:

答案 0 :(得分:3)

您无需下载源代码或从GAC中删除引用。只需按照this blog post

中描述的步骤操作即可
  • 取消选中:启用我的代码(仅管理)
  • 检查:启用源服务器支持
  • 添加符号服务器:在VS2010中,您只需要检查Microsoft Symbols Servers,无需输入网址,在VS2008中需要输入网址

创建一个新的ASP.NET MVC应用程序,在控制器操作中放置一个断点,当断点被命中时,从调用堆栈加载System.Web.Mvc程序集的符号,一旦符号加载,你将成为能够逐步完成源代码(在接受条款和条件之后)。

答案 1 :(得分:1)

您应该设置PublicKeyToken = null而不是注释<assemblies><add assembly>行。