2010-04-22 368 views
9

将Hybrid ASP.NET MVC1应用程序转换为MVC2后,当我尝试运行应用程序时出现以下错误:命名空间'System.Web'中不存在类型或命名空间名称'Mvc'

类型或命名空间名称“的mvc”不存在命名空间“System.Web程序”存在(?是否缺少程序集引用)

在Web.config文件中的allegeded罪魁祸首是System.Web.Mvc:

<namespaces> 
    <add namespace="System.Web.Mvc"/> 
    <add namespace="System.Web.Mvc.Ajax"/> 
    <add namespace="System.Web.Mvc.Html"/> 

到目前为止,我的调查似乎让我相信版本2 o f System.Web.Mvc未安装或未被拾取。

我试着创建一个基于MVC 2的文件>新项目,这是捡起新的(v2)版本的MVC。我也转换了一些其他项目(不是混合),他们没有问题转换为MVC2。

我也卸载了MVC1,尝试从GAC中删除对它的引用。但是,这一切都没有奏效。

任何想法?

回答

9

请确保您有绑定重定向在你的web.config:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Web.Mvc" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

这迫使MVC 2即使MVC 1是在机器上。

另外:MVC 1确实有System.Web.Mvc命名空间,所以一定要确保你也有:

<assemblies> 
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
+7

这是你的第二个建议,即在组件下明确声明System.Web.Mvc命名空间。谢谢克雷格 - 赞赏! – Guy 2010-04-22 15:37:52

2

我碰到的财产以后来到相似,解决办法是改变参考Microsoft.Web.Mvc所以本地复制被设置为True。

0

我有相同的错误,并单击页面中详细的编译错误链接显示问题与System.Web.Helpers,.Http,.WebPages

备份系统后,我运行update-package -reinstall'并强制卸载/重新安装所有软件包。这迫使web.config文件被正确地重建,dependentAssembly部分构建正确。

重建解决方案后,它首次运行。

请注意,它确实在web.config中添加了以下错误providers部分。

<contexts> 
    <context type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</contexts> 
<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 

这只能产生生成警告,但我确实有利于前述contexts元素将其删除。

相关问题