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

Guy*_*Guy 9 hybrid asp.net-mvc-2

将混合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"/>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的调查似乎让我相信System.Web.Mvc的第2版没有安装或者没有被选中.

我已经尝试创建一个基于MVC 2的文件>新项目,并且正在拿起MVC的新(v2)版本.我还转换了一些其他项目(不是混合项目),并且它们没有问题地转换为MVC2.

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

有任何想法吗?

Cra*_*ntz 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>
Run Code Online (Sandbox Code Playgroud)

即使MVC 1在机器上,这也会强制MVC 2.

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

  <assemblies>
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Run Code Online (Sandbox Code Playgroud)

  • 这是你的第二个建议,即明确声明组件的System.Web.Mvc命名空间.谢谢克雷格 - 谢谢! (7认同)