命名空间'System.Web'中不存在'Mvc'类型或命名空间

9
在将混合ASP.NET MVC1应用程序转换为MVC2后,当我尝试运行应用程序时,出现以下错误:
在命名空间'System.Web'中找不到'Mvc'类型或命名空间名称(是否缺少程序集引用?)
Web.config文件中的罪魁祸首是System.Web.Mvc:
<namespaces>
    <add namespace="System.Web.Mvc"/>
    <add namespace="System.Web.Mvc.Ajax"/>
    <add namespace="System.Web.Mvc.Html"/>

到目前为止,我的调查似乎表明 System.Web.Mvc 的第二个版本没有被安装或未被检测到。

我尝试了基于 MVC 2 创建一个新项目,它会使用新的(v2)MVC版本。我还将其他一些项目(这些项目不是混合型的)转换成了 MVC2,并且它们也没有遇到任何问题。

我还卸载了 MVC1,试图从全局程序集缓存中删除对它的引用。然而,所有这些都没有起作用。

有什么想法吗?

3个回答

8

请确保在您的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 1,这也会强制使用MVC 2。

另外:MVC 1确实有一个System.Web.Mvc命名空间,所以请确保您也有:

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

7
是你的第二个建议,在程序集下明确声明 System.Web.Mvc 命名空间,解决了问题。感谢 Craig,非常感谢! - Guy

2

我遇到了类似的问题,解决方法是将引用更改为Microsoft.Web.Mvc,这样复制本地就设置为True。


1
我遇到了相同的错误,点击页面上详细的编译错误链接后,显示了与System.Web.Helpers、.Http和.WebPages有关的问题。
备份系统后,我运行了"update-package -reinstall"并强制卸载/重新安装所有包。这迫使web.config文件正确重建,并正确构建了dependentAssembly部分。
在重建解决方案后,它第一次运行成功。
请注意,它添加了以下错误的providers部分到web.config。
<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元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接