Il tipo o il nome dello spazio dei nomi non esiste nello spazio dei nomi "System.Web.Mvc"


217

L'acquisto della soluzione MVC3 è andato bene ma si è verificato un errore nel browser:

Messaggio di errore del compilatore: CS0234: Il nome del tipo o dello spazio dei nomi 'Html' non esiste nello spazio dei nomi 'System.Web.Mvc' (manca un riferimento all'assembly?)

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" />

Ho installato i pacchetti per la soluzione NuGete impostato per tutti i progetti MVC3. Non MVC3comprendono le biblioteche System.Web.Mvc.Ajax, System.Web.Mvc.Htmle gli altri? Perché visualizzo l'errore?


Nella cartella Riferimenti, ho 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 lo spazio dei nomi System.Web.Mvc

file 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>

1
qual è il tuo web server? è questo in IIS?
Daniel A. White,

Express IIS in Visual Studio 2012
J.Olufsen,

1
Qual è l'obiettivo del tuo progetto?
Daniel A. White,


2
Dipende da chi risponde a questa domanda: questo è tutto ciò che è necessario per alcuni di noi Gestire i pacchetti Nuget per la soluzione ... >> Aggiornamenti
Tom Stickel,

Risposte:


420

Pulisci la soluzione e quindi imposta la proprietà di tali file Copy Local = True.

Per impostare la proprietà Copia locale su Vero o Falso

In Esplora soluzioni, fare clic sul pulsante Mostra tutti i file per visualizzare il nodo Riferimenti.

  • Aprire il nodo Riferimenti per il progetto.
  • Fare clic con il tasto destro del mouse su un riferimento nell'elenco Riferimenti e fare clic su Proprietà. Le proprietà associate a quel riferimento vengono visualizzate in un elenco nella finestra Proprietà.
  • Nella finestra Proprietà, modifica la proprietà Copia locale su Vero o Falso.

11
Eccezionale! Questo mi ha risolto per un progetto MVC4. È abbastanza ovvio quando ci pensi. Non ho mai cercato il progetto distribuito per vedere se c'erano le DLL.
Alex Kilpatrick,

1
Grazie! Anche questo mi ha aiutato!
Maritim,

1
Prego. A volte i problemi complessi vengono risolti con una soluzione semplice. :)
Toffee

5
Funziona! Cambio solo un riferimento =>System.Web.Mvc
Jaider

5
Mi ci è voluto un po 'di tempo per capire cosa significasse "quei file". Esaminare i riferimenti di assembly su ogni progetto nella soluzione, qualsiasi cosa con "Microsoft ASP.NET \ ASP.NET MVC 3 \ Assembly" o simili nel percorso fa parte del problema.
Compito

60

Per qualsiasi motivo, DUE delle mie soluzioni hanno progetti web che hanno disinstallato spontaneamente asp.net MVC in qualche modo. L'ho installato da Nuget e ora entrambi funzionano di nuovo. Ciò è accaduto dopo un recente batch di aggiornamenti di Windows che includeva aggiornamenti di framework .net per la versione che stavo usando (4.5.1).

Modifica: dal blog .Net Web Development and Tools:

Microsoft Asp.Net MVC Security Update MS14-059 ha rotto la mia build!


4
Questo mi è appena successo. Tuttavia, ho aggiornato i miei pacchetti MVC invece di reinstallarli (i miei erano comunque obsoleti). C'è una fonte o un motivo per cui questo è successo?
Giosuè H,

5
Questo sembra essere correlato a KB2994379 o KB2992080 , a seconda della versione di MVC a cui fai riferimento (rispettivamente 5.1 e 5.0). L'aggiornamento offre una nuova versione di System.Web.Mvc che presumo stia introducendo un conflitto di versione. L'aggiornamento del pacchetto MVC risolverà l'errore. Se non riesci ad aggiornare per qualsiasi motivo, dovrai impostare System.Web.Mvc.dll per la copia locale.
Vinney Kelly,

1
Ho avuto lo stesso problema. Aggiorna il pacchetto e imposta copia local = true. Grazie a tutti!!!!
Vackup,

1
MVC Copia local = true +1.
Stanomatic,

4
Lo stesso è successo a me. Ho dovuto impostare MVC per copiare local = FALSE, ricostruire, copiare local = TRUE, ricostruire. Tutto bene.
Jeppebm,

38

Questo di solito mi prende quando corro da IIS e il pool di app per il sito predefinito è impostato su .NET versione 2.0. Quando si utilizza IIS da Visual Studio, viene creata una directory virtuale ma viene comunque eseguita nel pool di app del sito predefinito. Se si utilizza il server Web build in, fare clic con il pulsante destro del mouse sul progetto Web, accedere a Proprietà e assicurarsi di eseguirlo con la versione corretta di .NET. Su IIS controlla la versione .NET sul tuo pool di app.

In seguito al mio ultimo commento su come è stato creato il progetto, state includendo correttamente gli assembly, come di seguito (preso dal file web.config predefinito generato dal modello di progetto MVC3 in 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>

2
Tutti i progetti sono impostati per l'utilizzo di .NET Framework 4.5. Significa che .NET 4.5 non riesce a trovare System.Web.Mvc.Ajax e altre classi?
J. Olufsen,

Normalmente significa che è impostato per funzionare come 4.5, ma in realtà funziona come qualcos'altro, il che significa che non riesce a trovare System.Web.Mvc.Ajax in System.Web.Mvc.
BlackSpy,

A parte ciò, qual è la tua versione di System.Web.dll? Il motivo per cui chiedo è che hai detto di aver aggiunto gli assembly da NuGet: non hai creato un progetto Web MVC3?
BlackSpy,

31

Devi aggiornare MVC.

  1. Vai su Strumenti -> Gestione pacchetti NuGet -> Gestisci pacchetti NuGet per soluzione
  2. Fai clic su "Aggiornamenti"
  3. Aggiorna "Microsoft ASP.NET MVC"
  4. Ricostruisci soluzione

1
L'uso del pacchetto NuGet è buono, tuttavia è possibile scaricare una tonnellata di altri assemblaggi che potrebbero non essere necessari, tuttavia questo risolverà il problema.
Tela,

1
Ho avuto lo stesso problema, abbi un po 'di generosità.
Nit

28

Ho avuto lo stesso problema - il mio scenario era che stavo facendo riferimento al nuovo System.Web.Mvc.dll da una cartella lib e non avevo "Copia locale" impostato su true. L'applicazione stava quindi tornando alla versione nel GAC che non aveva gli spazi dei nomi corretti (HTML, Ajax ecc.) E mi stava dando l'errore di runtime.


16

La mia soluzione era sotto Gestisci pacchetti Nuget per soluzione ... - Avevo innumerevoli aggiornamenti da fare per un bel po 'di pacchetti.

Consentitemi di fare un passo indietro e dire che mi sono rovinato perché ho spostato la soluzione e i progetti da una cartella all'altra ... quindi le cose erano già fuori controllo rispetto a dove i progetti pensavano che fossero. Tutto è andato bene, ma apparentemente Nuget si confonde a meno che tu non usi un approccio diverso da me.

Torna alla soluzione ... Sono semplicemente andato a Gestisci pacchetti Nuget per soluzione ... >> Aggiornamenti >> Microsoft e .NET e ho premuto il pulsante Aggiorna tutto .

Tutto è tornato alla normalità e felice.


Ho pubblicato la stessa soluzione di tipo avendo saltato accidentalmente il tuo post +1 per te
Tom Stickel,

Questa è stata la soluzione anche per me.
Brad

Si noti che potrebbe essere necessario aggiornare JQuery e Bootstrap dopo aver effettuato l'operazione
Carl Onager,

L'aggiornamento dei pacchetti nuget di mvc, razor e pagine web ha funzionato per me su un progetto MVC5.
voam,

9

Ho scaricato un progetto mvc 5 e il problema offensivo che punta a

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

Con questo messaggio di errore:

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

-> in cui sono venuto a questa pagina Web e ho provato un aspetto pulito e alcune cose sopra ecc ...

Ciò che ha funzionato per me è stato solo quello di

Manage Nuget and Update all the packages.  Then it worked fine.

1
Oh, lascerò il mio post, ma vedo che azarc3 sta dicendo la stessa cosa. votandolo.
Tom Stickel,

7

L'esecuzione del comando seguente nel gestore pacchetti nuget lo ha risolto per me:

update-package microsoft.aspnet.mvc -reinstall

2
Questo deve essere votato circa altre mille volte.
Chazt3n,

1
@ Chazt3n Non ha funzionato per me, ma è un buon suggerimento quindi + 1
Jared Beach

Ho provato tutti gli altri metodi e, tecnicamente utilizzando Gestione pacchetti, ho disinstallato, reinstallato e aggiornato e cosa no. Quindi ero pessimista riguardo a questa risposta, ma disperato. Questo ha funzionato in qualche modo.
Mahesh,

6

Questa risposta è piuttosto tardi data la data della domanda, ma qualcuno potrebbe trovarla utile.

Nessuna delle soluzioni precedenti ha funzionato per me in Visual Studio 2012 su un progetto locale, Net Framework 4.5 MVC 4. Per il contesto, stavo seguendo un tutorial sulla creazione di un'API Web barebone su CodeProject ( http://www.codeproject.com/ Articoli / 615805 / Creazione-a-Clean-Minimal-Footprint-ASP-NET-WebAPI ) quando ho riscontrato questo problema.

Quello che ha funzionato per me è stato aggiungere esplicitamente "System.Web.Mvc" ai riferimenti della mia applicazione, anche se l'applicazione aveva già fatto riferimento a "System.Web".


Grazie. Ciò ha risolto il mio problema (sebbene fosse con DevExpress.Web.Mvc)
dferraro,

+1. Sto usando MvcSiteMapProvider e poiché non funziona con gli ultimi assembly di MVC, non ho potuto eseguire un "Aggiorna tutto" per i pacchetti MVC di Microsoft ASP.Net tramite nuget. Un altro suggerimento è che probabilmente dovrai fare un "CopyLocal = True" per questo assembly.
user007

Ho solo bisogno di trasferire l'applicazione web di debug in un nuovo ambiente. Necessario aggiungere "copia locale" al riferimento.
dudeNumber4,

4

Ho avuto lo stesso problema, ma nessuna delle precedenti ha funzionato per me. Mi hanno messo nella giusta direzione però.

Ad esempio, quando imposto "Copia locale" su "true" per riferimento System.Web.Mvc, lo imposta automaticamente su False.

Ho più progetti che dipendono dal riferimento System.Web.Mvc nella mia soluzione, ma solo uno ha causato questo problema. In VS 2012 questo riferimento è etichettato con il triangolo giallo di attenzione.

Trova questo riferimento => rimuovilo => aggiungilo di nuovo

Ciò ha risolto il problema per me. Spero che questo ti aiuti


3

Visualizza e controlla i percorsi di riferimento nel tuo csproj.

Avevo rimosso i riferimenti a System.Web.Mvc (e altri) e li avevo preparati su un percorso personalizzato. C:\Project\OurWebReferences

Tuttavia, dopo aver fatto ciò, il percorso di riferimento nel csproj ancora non è cambiato. ERA

<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>

Modificato 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>

I percorsi sono solo un esempio.


3

Per me, la soluzione era quella di garantire che tutti i progetti fossero realizzati per la stessa CPU, nel mio caso x86


2

Copia Local = True è stato risolto per uno dei miei progetti. Ma in un altro progetto, ottengo lo stesso errore, ho provato a impostare Copia Local = true, ma non risolve il mio problema. Modifica del framework di destinazione da 4.5.1 a 4.5 in Proprietà del progetto.


2

Ho fatto qualcosa di veramente stupido (e forse anche tu).

Stavo cercando di chiamare System.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html è uno spazio dei nomi e non una classe e non ho letto il mio messaggio di errore così bene, quindi ho interpretato il mio errore in quanto la classe Htmlnon esiste nello spazio dei nomi System.Web.Mvc ed è così che ho finito quassù (stupido lo so).

Tutto quello che dovevo fare era aggiungere una dichiarazione using @using System.Web.Mvc.Htmlalla mia pagina e poi ha @Html.Partialfunzionato come previsto.


Visual Studio 2015 contrassegnerà l'utilizzo come non necessario, ma se lo lasci rimuoverlo, otterrai errori come: "Il tipo o il nome dello spazio dei nomi 'Helpers' non esiste nello spazio dei nomi 'Microsoft.Web' (ti manca un riferimento di assieme?) ".
justdan23,

1

se uno dei precedenti non risolve il problema, basta impostare le proprietà di System.Web.Mvc.dll per copiare ture locale.

risolverà


1

Ho avuto lo stesso problema, ma nel mio caso è stato originato da altri fattori. Scrivo questo per aiutare altre persone con lo stesso problema. Ho una soluzione con più progetti. due di loro lavorano con System.Web.Mvc, normalmente il nostro riferimento puntava a pacchetti esterni in cui abbiamo controllato la versione usata. Per qualche motivo uno dei riferimenti al progetto va a GAC ​​e punta alla dll GAC (versione 4.0.0.1) e il programma ha ottenuto l'errore. Per correggerlo:

Controlla semplicemente se i riferimenti a System.Web.Mvc puntano alla stessa dll nello stesso percorso di directory.

Spero che ti aiuti.


1

Ho eliminato System.Web.dll dalla cartella Bin del mio sito.


sono il mio caso sì. Stavo passando al vecchio ramo senza MVC. E System.Web.dll nella cartella Bin ha rotto il mio bambino.
andre719mv,

1

Ho avuto questo problema, l'attivazione e disattivazione della copia locale ecc. Non funzionava. Il progetto non utilizzava Nuget, quindi correzioni che erano fuori discussione.

La soluzione per me era installare MVC 3 (cosa che ho fatto tramite il programma di installazione della piattaforma Web).

Sospetto che questo diventerà più una soluzione per le persone poiché il framework .net continua ad avanzare e alle persone non è installata la roba MVC più vecchia.


1

È probabile che l'impostazione della DLL su CopyLocal / true o una qualsiasi delle altre principali correzioni risolva il problema, ma ecco un altro caso limite che mi ha attirato per 20 minuti di tempo perso.

Quando aggiungi gli spazi dei nomi a Views / Web.config, assicurati che siano inseriti correttamente:

  <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>

1

Ok, sembra che molte persone stiano riscontrando questo problema. Il mio problema era causato da riferimenti con percorsi alle cartelle bin di altri progetti o riferimenti a DLL dalle cartelle di sistema. Il progetto aveva circa 6 anni e gli sviluppatori precedenti avevano deciso che questo era il modo in cui avrebbero fatto riferimento alle loro biblioteche.

La soluzione era quella di esaminare ogni riferimento e controllare i percorsi, quindi rimuovere il riferimento e aggiungerlo usando NuGet. Per ogni pacchetto che non era su NuGet ho creato un'altra cartella insieme ai pacchetti e ho inserito la dll nello stesso layout di NuGet.

Ho anche dovuto esaminare i file di configurazione e assicurarmi che fosse utilizzata la versione corretta dei pacchetti. Un processo lungo e doloroso!


1

Ho un progetto che lo fa ogni volta che costruisco con la vista aperta. Non appena ho chiuso la vista, l'errore scompare e la compilazione ha esito positivo. Molto strano.


0

Ho avuto lo stesso problema, nessuna delle soluzioni ha funzionato per me, infine ho rimosso System.Web.MVCe aggiunto di nuovo, quindi tutto è tornato alla normalità e il mio problema è stato risolto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.