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

217

La solución MVC3 de Buiding salió bien, pero tengo un error en el navegador:

Mensaje de error del compilador: CS0234: El tipo o nombre de 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 los he configurado para todos los proyectos MVC3. Ciervas MVC3incluyen bibliotecas System.Web.Mvc.Ajax, System.Web.Mvc.Htmly otros? ¿Por qué recibo el error?


En la carpeta References, 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
fuente
1
cual es tu servidor web es esto en iis?
Daniel A. White
Express IIS en Visual Studio 2012
J.Olufsen
1
¿Cuál es el objetivo de su proyecto?
Daniel A. White
2
Depende de quién responda a esta pregunta: esto es todo lo que se necesita para algunos de nosotros Administrar paquetes Nuget para la solución ... >> Actualizaciones
Tom Stickel

Respuestas:

420

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 con el botón 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.
Caramelo
fuente
11
¡Increíble! Esto me lo arregló en un proyecto MVC4. Es algo obvio cuando lo piensas. Nunca busqué en el proyecto implementado para ver si las DLL estaban allí.
Alex Kilpatrick
1
¡Gracias! ¡Esto también me ayudó!
Maritim
1
De nada. A veces, los problemas complejos se resuelven con una solución simple. :)
Toffee
55
¡Funciona! Solo cambio una referencia =>System.Web.Mvc
Jaider
55
Me tomó un poco de tiempo entender qué significaban "esos archivos". Revise las referencias de ensamblaje en cada proyecto de la solución, cualquier cosa con "Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies" o similar en la ruta es parte del problema.
Tarea
60

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 trabajan de nuevo. Esto sucedió después de un lote reciente de actualizaciones de Windows que incluía actualizaciones de .NET Framework para la versión que estaba usando (4.5.1).

Editar: Desde el Blog de Herramientas y Desarrollo Web .Net:

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

Chris
fuente
44
Esto me acaba de pasar. Sin embargo, actualicé mis paquetes MVC en lugar de reinstalarlos (los míos estaban desactualizados de todos modos). ¿Hay alguna fuente o razón por la que sucedió esto?
Joshua H
55
Esto parece estar relacionado con KB2994379 o KB2992080 , según la versión de MVC a la que haga referencia (5.1 y 5.0 respectivamente). La actualización ofrece una nueva versión de System.Web.Mvc que supongo que está introduciendo un conflicto de versiones. La actualización de su paquete MVC solucionará el error. Si no puede actualizar por alguna razón, deberá configurar System.Web.Mvc.dll para que se copie localmente.
Vinney Kelly
1
Yo tuve el mismo problema. Actualice el paquete y configure copy local = true. ¡¡¡¡Gracias a todos!!!!
Vackup
1
Copia MVC local = verdadero +1.
Stanomatic
44
Lo mismo me pasó a mí. Tuve que configurar MVC para copiar local = FALSO, reconstruir, copiar local = VERDADERO, reconstruir. Todo bien.
Jeppebm
38

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, crea un directorio virtual pero aún se ejecuta bajo el grupo de aplicaciones del sitio predeterminado. Si usa la compilación en el servidor web, haga clic derecho en su proyecto web, vaya a propiedades y asegúrese de ejecutarlo 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 ensamblajes, 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
fuente
2
Todos los proyectos configurados para usar .NET Framework 4.5. ¿Significa que .NET 4.5 no puede encontrar System.Web.Mvc.Ajax y otras clases?
J.Olufsen
Normalmente significa que está configurado para ejecutarse como 4.5, pero en realidad se está ejecutando como algo más, lo que significa que no puede encontrar System.Web.Mvc.Ajax en System.Web.Mvc.
BlackSpy
Como comentario, ¿cuál es su versión de System.Web.dll? La razón por la que pregunto es que usted dijo que agregó los ensamblajes de NuGet, ¿no creó un proyecto web MVC3?
BlackSpy
31

Necesita 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. Reconstruir solución
Mate
fuente
1
El uso del paquete NuGet es bueno, sin embargo, puede descargar una tonelada de otros ensamblajes que pueden no ser necesarios, sin embargo, esto lo solucionará.
Canvas
1
Tuve el mismo problema, tener alguna recompensa.
Nit
28

Tuve el mismo problema: mi escenario era que estaba haciendo referencia al nuevo System.Web.Mvc.dll desde una carpeta lib y no tenía "Copiar local" establecido en verdadero. La aplicación estaba volviendo a la versión en el GAC que no tenía los espacios de nombres correctos (Html, Ajax, etc.) y me estaba dando el error de tiempo de ejecución.

Peter Munnings
fuente
16

Mi solución estaba en Administrar paquetes Nuget para solución ... - Tenía innumerables actualizaciones que hacer para algunos paquetes.

Permítanme retroceder medio paso y decir que me equivoqué porque moví la solución y los proyectos de una carpeta a otra ... así que las cosas ya estaban fuera de control en comparación con lo que los proyectos pensaban que estaban. Todo se movió bien, pero aparentemente Nuget se confunde a menos que use un enfoque diferente al que yo hice.

Volver a la solución ... Simplemente fui a Administrar paquetes Nuget para la solución ... >> Actualizaciones >> Microsoft y .NET y presioné el botón Actualizar todo .

Todo volvió a la normalidad y feliz.

azarc3
fuente
Publiqué la misma solución de tipo al omitir accidentalmente su publicación +1 por usted
Tom Stickel
Esta fue la solución para mí también.
bradj
Tenga en cuenta que también puede necesitar actualizar JQuery y Bootstrap después de hacer esto
Carl Onager
La actualización de los paquetes nuget de mvc, razor y páginas web funcionó para mí en un proyecto MVC5.
voam
9

Descargué un proyecto de mvc 5 y el problema ofensivo apuntaba a

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

Con este mensaje de error:

CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?)

-> en el que llegué a esta página web y probé una limpieza y algunas cosas anteriores, etc.

Lo que funcionó para mí fue solo

Manage Nuget and Update all the packages.  Then it worked fine.
Tom Stickel
fuente
1
Ah, dejaré mi publicación, pero veo que azarc3 dice lo mismo. votando a él.
Tom Stickel
7

Ejecutar el siguiente comando en el administrador de paquetes nuget lo arregló para mí:

update-package microsoft.aspnet.mvc -reinstall
usuario1477388
fuente
2
Esto necesita ser votado unas mil veces más.
Chazt3n
1
@ Chazt3n No funcionó para mí, pero es una buena sugerencia, así que + 1
Jared Beach
Probé todos los demás métodos, y técnicamente usando el Administrador de paquetes, desinstalé y reinstalé y actualicé y lo que no. Así que fui pesimista sobre esta respuesta, pero desesperada. Esto funcionó de alguna manera.
Mahesh
6

Esta respuesta es bastante tardía dada la fecha de la pregunta, pero alguien puede encontrarla útil.

Ninguna de las soluciones anteriores funcionó para mí en Visual Studio 2012 en un proyecto local, Net Framework 4.5 MVC 4. Por contexto, estaba siguiendo un tutorial sobre la creación de una API web básica en CodeProject ( http://www.codeproject.com/ Artículos / 615805 / Creación de una huella limpia-mínima-ASP-NET-WebAPI ) cuando me encontré con este problema.

Lo que funcionó para mí fue agregar explícitamente "System.Web.Mvc" a las referencias de mi aplicación, a pesar de que la aplicación ya hacía referencia a "System.Web".

Sean
fuente
Gracias. Esto resolvió mi problema (aunque fue con DevExpress.Web.Mvc)
dferraro
+1. Estoy usando MvcSiteMapProvider y dado que no funciona con los últimos ensamblados de MVC, no pude hacer una "Actualización de todo" para los paquetes de Microsoft ASP.Net MVC a través de nuget. Una sugerencia más es que probablemente necesite hacer un "CopyLocal = True" para este ensamblado.
user007
Solo necesitaba impulsar la aplicación web de depuración a un nuevo entorno. Necesario para agregar "copia local" a la referencia.
dudeNumber4
4

Tuve el mismo problema, pero ninguno de los anteriores funcionó para mí. Sin embargo, me pusieron en la dirección correcta.

Por ejemplo, cuando configuro la opción "Copiar local" en "verdadero" para la referencia de System.Web.Mvc, la vuelve a establecer automáticamente en False.

Tengo varios proyectos que dependen de la referencia System.Web.Mvc en mi solución, pero solo uno causó este problema. En VS 2012, esta referencia está etiquetada con el triángulo de atención amarillo.

Encuentre esta referencia => eliminarla => volver a agregarla

Eso me lo arregló. Espero que esto ayude

bohem.be
fuente
3

Ver y verificar las rutas de referencia en su csproj.

Quité las referencias a System.Web.Mvc (y otras) y las volví a agregar a una ruta personalizada. C:\Project\OurWebReferences

Sin embargo, después de hacer esto, la ruta de referencia en el csproj todavía no cambió. ESTABA

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\OurWebProject\bin\Debug\System.Web.Mvc.dll</HintPath>
</Reference>

Cambiado a manualmente

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\..\..\OurWebReferences\System.Web.Mvc.dll</HintPath>
</Reference>

Las rutas son solo un ejemplo.

Valamas
fuente
3

Para mí, la solución era asegurar que todos los proyectos se construyeran para la misma CPU, en mi caso x86

Rob Bowman
fuente
2

Copiar Local = True fue resolver para uno de mis proyectos. Pero en otro proyecto, obtengo el mismo error, intenté configurar Copy Local = true, pero no resolvió mi problema. Cambiar el marco de destino de 4.5.1 a 4.5 en las propiedades del proyecto Ayudado con esto.

Andrey
fuente
2

Hice algo realmente estúpido (y tal vez tú también lo hiciste).

Estaba tratando de llamar System.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html es un espacio de nombres y no una clase y no leí mi mensaje de error tan bien, así que interpreté mi error ya que la clase Htmlno existe en el espacio de nombres System.Web.Mvc y así es como terminé aquí arriba (estúpido lo sé).

Todo lo que necesitaba hacer era agregar una declaración de uso @using System.Web.Mvc.Htmla mi página y luego @Html.Partialfuncionó como se esperaba.

Playa Jared
fuente
Visual Studio 2015 marcará el uso como no necesario, pero si deja que lo elimine, obtendrá errores como: "El tipo o nombre del espacio de nombres 'Helpers' no existe en el espacio de nombres 'Microsoft.Web' (falta una referencia de ensamblaje?) ".
justdan23
1

si alguno de los anteriores no resuelve su problema, simplemente configure las propiedades de System.Web.Mvc.dll para copiar el ture local.

va a resolver

Ramakrishna
fuente
1

Tuve el mismo problema, pero en mi caso se originó por otro factor. Escribo esto para ayudar a otras personas con el mismo problema. Tengo una solución con múltiples proyectos. dos de ellos funcionan con System.Web.Mvc, normalmente nuestra referencia apuntaba a paquetes externos donde controlamos la versión utilizada. Por alguna razón, una de las referencias del proyecto va a GAC ​​y apunta a la dll de GAC (versión 4.0.0.1) y el programa recibió el error. Para corregirlo:

Verificación simple si las referencias a System.Web.Mvc apuntan a la misma dll en la misma ruta de directorio.

Espero que te sirva de ayuda.

desarrollador libre
fuente
1

He eliminado System.Web.dll de Bin Frolder de mi sitio.

andre719mv
fuente
Soy mi caso, sí. Me estaba cambiando a la antigua rama sin MVC. Y System.Web.dll en la carpeta Bin rompió mi bild.
andre719mv
1

Tuve este problema, configurar la copia local activada y desactivada, etc.no funcionó. El proyecto no estaba usando nuget, por lo que las soluciones que estaban fuera de la cuestión también estaban fuera de discusión.

La solución para mí fue instalar MVC 3 (que hice a través del instalador de la plataforma web).

Sospecho que esto se convertirá en una solución más para las personas a medida que el marco .net continúa avanzando y las personas no tienen instalado el material MVC anterior.

4imble
fuente
1

Es probable que configurar su DLL en CopyLocal / true o cualquiera de las otras soluciones importantes para esto solucione su problema, pero aquí hay otro caso extremo que me atrapó durante 20 minutos de tiempo perdido.

Cuando agregue sus espacios de nombres a su Vistas / Web.config, asegúrese de que estén correctamente colocados:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="THE.NameSpace" />
        <add namespace="THE.Namespace" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
El truco de Moby doble
fuente
1

Ok, muchas personas parecen estar experimentando este problema. Mi problema fue causado por referencias que tenían rutas a las carpetas bin de otros proyectos, o referencias dlls desde carpetas del sistema. El proyecto tenía aproximadamente 6 años y los desarrolladores anteriores habían decidido que esta era la forma en que iban a hacer referencia a sus bibliotecas.

La solución fue revisar cada referencia y verificar las rutas, luego eliminar la referencia y agregarla usando NuGet. Para cualquier paquete que no estuviera en NuGet, creé otra carpeta junto con los paquetes y puse el dll allí en el mismo diseño que lo haría NuGet.

También tuve que revisar los archivos de configuración y asegurarme de que se estaba utilizando la versión correcta de los paquetes. ¡Un proceso largo y doloroso!

Juan
fuente
1

Tengo un proyecto que hace esto cada vez que construyo con la Vista abierta. Tan pronto como cerré la vista, el error desaparece y la compilación tiene éxito. Muy extraño.

Mark Good
fuente
0

Tuve el mismo problema, ninguna de las soluciones funcionó para mí, finalmente eliminé la System.Web.MVCy agregué nuevamente. Luego todo volvió a la normalidad y mi problema se resolvió.

Sirwan Afifi
fuente