El tipo o nombre del espacio de nombres no existe en el espacio de nombres 'System.Web.Mvc'

Resuelto J.Olufsen asked hace 12 años • 23 respuestas

La construcción de la solución MVC3 funcionó bien pero apareció un error en el navegador:

Mensaje de error del compilador: CS0234: el tipo o nombre del espacio de nombres 'Html' no existe en el espacio de nombres 'System.Web.Mvc' (¿falta una referencia de ensamblado?)

Source Error:
Line 25:         <add namespace="System.Web.Mvc" />
Line 26:         <!--<add namespace="System.Web.Mvc.Ajax" />-->
Line 27:         <add namespace="System.Web.Mvc.Html" />
Line 28:         <add namespace="System.Web.Routing" />
Line 29:         <add namespace="System.Web.WebPages" />

He instalado paquetes para la solución NuGety configurado para todos los proyectos MVC3. ¿ MVC3Incluye bibliotecas System.Web.Mvc.Ajaxy System.Web.Mvc.Htmlotros? ¿Por qué recibo el error?


En la carpeta Referencias, tengo System.Web.Mvc

Runtime version: v4.0.30319,

Version: 3.0.0.0

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <machineKey compatibilityMode="Framework45" />
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportStore;Integrated Security=True;Pooling=False;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

MSDN el espacio de nombres System.Web.Mvc

archivo packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0-rc" />
  <package id="jQuery" version="1.7.2" />
  <package id="jQuery.UI.Combined" version="1.8.11" />
  <package id="jQuery.Validation" version="1.9" />
  <package id="Microsoft.AspNet.Mvc" version="3.0.20105.1" />
  <package id="Microsoft.AspNet.Providers.Core" version="1.0" />
  <package id="Microsoft.AspNet.Providers.LocalDB" version="1.0" />
  <package id="Microsoft.AspNet.Razor" version="1.0.20105.408" />
  <package id="Microsoft.AspNet.WebPages" version="1.0.20105.408" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
  <package id="Modernizr" version="2.0.6" />
  <package id="Moq" version="4.0.10827" />
  <package id="Ninject" version="3.0.1.10" />
</packages>
J.Olufsen avatar Jun 17 '12 19:06 J.Olufsen
Aceptado

Limpie su solución y luego establezca la propiedad de esos archivos en Copy Local = True.

Para establecer la propiedad Copiar local en Verdadero o Falso

En el Explorador de soluciones, haga clic en el botón Mostrar todos los archivos para mostrar el nodo Referencias.

  • Abra el nodo Referencias para el proyecto.
  • Haga clic derecho en una referencia en la lista Referencias y haga clic en Propiedades. Las propiedades asociadas con esa referencia aparecen en una lista en la ventana Propiedades.
  • En la ventana Propiedades, cambie la propiedad Copiar local a Verdadero o Falso.
Toffee avatar Oct 31 '2012 00:10 Toffee

Por alguna razón, DOS de mis soluciones tienen proyectos web que desinstalaron espontáneamente asp.net MVC de alguna manera. Lo instalé desde Nuget y ahora ambos funcionan nuevamente. Esto sucedió después de un lote reciente de actualizaciones de Windows que incluían actualizaciones de .net framework para la versión que estaba usando (4.5.1).

Editar: Del blog de herramientas y desarrollo web .Net:

¡La actualización de seguridad MS14-059 de Microsoft Asp.Net MVC rompió mi compilación!

Christopher avatar Oct 16 '2014 01:10 Christopher

Este normalmente me atrapa cuando ejecuto desde IIS y el grupo de aplicaciones para el sitio predeterminado está configurado en .NET versión 2.0. Cuando se usa IIS desde Visual Studio, se crea un directorio virtual pero aún se ejecuta en el grupo de aplicaciones del sitio predeterminado. Si utiliza el servidor web integrado, haga clic derecho en su proyecto web, vaya a propiedades y asegúrese de estar ejecutándolo con la versión correcta de .NET. En IIS, verifique la versión .NET en su grupo de aplicaciones.

Siguiendo con mi último comentario sobre cómo se creó el proyecto, ¿está incluyendo correctamente los ensamblados, como se muestra a continuación (tomado del archivo web.config predeterminado generado por la plantilla de proyecto MVC3 en VS10)?

<compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
</compilation>
BlackSpy avatar Jun 17 '2012 13:06 BlackSpy

Necesitas actualizar MVC.

  1. Vaya a Herramientas -> Administrador de paquetes NuGet -> Administrar paquetes NuGet para la solución
  2. Haga clic en "Actualizaciones"
  3. Actualización "Microsoft ASP.NET MVC"
  4. Solución de reconstrucción
Matt avatar Nov 07 '2014 19:11 Matt