O nome do tipo ou espaço para nome não existe no espaço para nome 'System.Web.Mvc'


217

A solução MVC3 da Buiding correu bem, mas ocorreu um erro no navegador:

Mensagem de erro do compilador: CS0234: O tipo ou nome do espaço para nome 'Html' não existe no espaço para nome 'System.Web.Mvc' (está faltando uma referência de montagem?)

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

Instalei pacotes para a solução NuGete configurei para todos os projetos MVC3. Será que MVC3incluem bibliotecas System.Web.Mvc.Ajax, System.Web.Mvc.Htmle outros? Por que estou recebendo o erro?


Na pasta Referências, tenho 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 o espaço para nome System.Web.Mvc

arquivo 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 é o seu servidor web? isso está no iis?
Daniel A. White

Express IIS no Visual Studio 2012
J.Olufsen

1
qual é o objetivo do seu projeto definido?
Daniel A. White


2
Depende de quem responde a essa pergunta - isso é tudo o que é necessário para alguns de nós. Gerenciar pacotes Nuget para solução ... >> Atualizações
Tom Stickel

Respostas:


420

Limpe sua solução e defina a propriedade desses arquivos como Copy Local = True.

Para definir a propriedade Copiar local como Verdadeiro ou Falso

No Gerenciador de Soluções, clique no botão Mostrar Todos os Arquivos para exibir o nó Referências.

  • Abra o nó Referências para o projeto.
  • Clique com o botão direito do mouse em uma referência na lista Referências e clique em Propriedades. As propriedades associadas a essa referência aparecem em uma lista na janela Propriedades.
  • Na janela Propriedades, altere a propriedade Copiar local para Verdadeiro ou Falso.

11
Impressionante! Isso corrigiu para mim em um projeto MVC4. É meio óbvio quando você pensa sobre isso. Eu nunca olhei no projeto implantado para ver se as DLLs estavam lá.
precisa

1
Obrigado! Isso me ajudou também!
Maritim

1
De nada. Às vezes, problemas complexos são resolvidos por uma solução simples. :)
Toffee

5
Funciona! Eu apenas mudei apenas uma referência => #System.Web.Mvc
Jaider

5
Demorei um pouco para descobrir o que "esses arquivos" significavam. Percorra as referências de montagem em todos os projetos da solução, qualquer coisa com "Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies" ou similar no caminho faz parte do problema.
Tarefa

60

Por alguma razão, DUAS das minhas soluções têm projetos da Web que desinstalam espontaneamente o asp.net MVC de alguma forma. Eu o instalei no Nuget e agora os dois funcionam novamente. Isso aconteceu depois de um lote recente de atualizações do Windows que incluíam atualizações da estrutura .net da versão que eu estava usando (4.5.1).

Edit: No Blog .Net Desenvolvimento Web e Ferramentas:

A atualização de segurança do Microsoft Asp.Net MVC MS14-059 quebrou minha compilação!


4
Isto somente aconteceu para mim. No entanto, atualizei meus pacotes MVC em vez de reinstalá-los (os meus estavam desatualizados de qualquer maneira). Existe uma fonte ou razão pela qual isso aconteceu?
21713 Joshua H

5
Parece estar relacionado ao KB2994379 ou KB2992080 , dependendo da versão do MVC que você está fazendo referência (5.1 e 5.0, respectivamente). A atualização fornece uma nova versão do System.Web.Mvc que, presumo, está introduzindo um conflito de versão. A atualização do seu pacote MVC corrigirá o erro. Se você não puder atualizar por qualquer motivo, precisará definir o System.Web.Mvc.dll para ser copiado localmente.
Vinney Kelly

1
Eu tive o mesmo problema. Atualize o pacote e defina copy local = true. Obrigado a todos !!!!
Vackup

1
Cópia MVC local = verdadeiro +1.
Stanomatic

4
O mesmo aconteceu comigo. Tinha que configurar o MVC para copiar local = FALSE, reconstruir, copiar local = TRUE, reconstruir. Tudo bom.
Jeppebm 17/10

38

Esse normalmente me pega quando executo o IIS e o pool de aplicativos do site padrão está definido como .NET versão 2.0. Ao usar o IIS no visual studio, ele cria um diretório virtual, mas ainda é executado no pool de aplicativos do site padrão. Se estiver usando o servidor da Web compilar, clique com o botão direito do mouse em seu projeto da Web, vá para Propriedades e verifique se está executando na versão correta do .NET. No IIS, verifique a versão do .NET no seu pool de aplicativos.

Seguindo meu último comentário sobre como o projeto foi criado - você está incluindo corretamente os assemblies, como abaixo (extraído do arquivo web.config padrão gerado pelo modelo de projeto MVC3 no 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
Todos os projetos configurados para usar o .NET Framework 4.5. Isso significa que o .NET 4.5 não pode encontrar o System.Web.Mvc.Ajax e outras classes?
J.Olufsen

Normalmente, isso significa que está definido para ser executado como 4.5, mas na verdade está sendo executado como outra coisa, o que significa que não é possível encontrar System.Web.Mvc.Ajax em System.Web.Mvc.
BlackSpy

Como um aparte, qual é a sua versão do System.Web.dll? O motivo pelo qual pergunto é que você disse que adicionou os assemblies do NuGet - você não criou um projeto da Web MVC3?
BlackSpy

31

Você precisa atualizar o MVC.

  1. Vá para Ferramentas -> Gerenciador de Pacotes NuGet -> Gerenciar pacotes NuGet para solução
  2. Clique em "Atualizações"
  3. Atualizar "Microsoft ASP.NET MVC"
  4. Solução de reconstrução

1
O uso do pacote NuGet é bom, no entanto, é possível baixar uma tonelada de outras montagens que podem não ser necessárias, mas isso irá corrigi-lo.
Canvas

1
Teve o mesmo problema, tenha alguma recompensa.
Nit

28

Eu tive o mesmo problema - meu cenário era que eu estava fazendo referência ao novo System.Web.Mvc.dll a partir de uma pasta lib e não tinha "Copy Local" configurado como true. O aplicativo foi revertido para a versão no GAC que não possuía os namespaces corretos (HTML, Ajax etc.) e estava me dando o erro de tempo de execução.


16

Minha solução estava em Gerenciar pacotes Nuget para solução ... - Eu tinha várias atualizações para fazer em alguns pacotes.

Deixe-me voltar um passo e dizer que me ferrei porque mudei a solução e os projetos de uma pasta para outra ... para que as coisas já estivessem malucas em comparação com o local em que os projetos pensavam. Tudo mudou muito bem, mas aparentemente Nuget fica confuso, a menos que você use uma abordagem diferente da minha.

De volta à solução ... Simplesmente fui para Gerenciar pacotes Nuget para solução ... >> Atualizações >> Microsoft e .NET e pressione o botão Atualizar tudo .

Tudo voltou ao normal e feliz.


Eu postei mesma solução tipo tendo acidentalmente pular seu post +1 para você
Tom Stickel

Esta foi a solução para mim também.
Bradj

Observe que você também pode precisar atualizar o JQuery e o Bootstrap após fazer isso #
Carl Onager

A atualização dos pacotes de nuget mvc, razor e páginas da web funcionou para mim em um projeto MVC5.
voam

9

Baixei um projeto do mvc 5 e o problema incorreto apontando para

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

Com esta mensagem de erro:

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

-> em que cheguei a esta página e tentei limpar algumas coisas acima, etc ...

O que funcionou para mim foi apenas para

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

1
Ah, vou deixar minha postagem, mas vejo que o azarc3 está dizendo a mesma coisa. votando nele.
quer

7

A execução do seguinte comando no gerenciador de pacotes nuget o corrigiu para mim:

update-package microsoft.aspnet.mvc -reinstall

2
Isso precisa ser votado mais de mil vezes.
Chazt3n 26/05

1
@ Chazt3n Não funcionou para mim, mas é uma boa sugestão, então + 1
Jared Beach

Eu tentei todos os outros métodos e, tecnicamente, usando o Gerenciador de Pacotes, desinstalei e reinstalei e atualizei o que não é. Por isso, fiquei pessimista com esta resposta, mas desesperado. Isso funcionou de alguma forma.
Mahesh

6

Essa resposta é um pouco tarde, dada a data da pergunta, mas alguém pode achar útil.

Nenhuma das soluções acima funcionou para mim no Visual Studio 2012 em um projeto local, o Net Framework 4.5 MVC 4. Para o contexto, eu estava seguindo um tutorial sobre como criar uma API Web de barebones no CodeProject ( http://www.codeproject.com/ Articles / 615805 / Criação de uma pegada mínima limpa - ASP-NET-WebAPI ) quando deparei com esse problema.

O que funcionou para mim foi adicionar explicitamente "System.Web.Mvc" às referências do meu aplicativo, mesmo que o aplicativo já tenha feito referência a "System.Web".


Obrigado. Isso resolveu o meu problema (althought foi com DevExpress.Web.Mvc)
dferraro

+1. Estou usando o MvcSiteMapProvider e, como ele não funciona com os assemblies mais recentes do MVC, não pude fazer uma "Atualizar tudo" para os pacotes do Microsoft ASP.Net MVC por meio de nuget. Mais uma sugestão é que você provavelmente precisará fazer um "CopyLocal = True" para este assembly.
user007

Só é necessário enviar o aplicativo da Web de depuração para o novo ambiente. Necessário adicionar "copiar local" à referência.
dudeNumber4

4

Eu tive o mesmo problema, mas nenhuma das opções acima funcionou para mim. Eles me colocaram na direção certa.

Por exemplo, quando eu defino o "Copy Local" como "true" para a referência System.Web.Mvc, ele o define automaticamente novamente como False.

Eu tenho vários projetos que dependem da referência System.Web.Mvc na minha solução, mas apenas um causou esse problema. No VS 2012, essa referência é rotulada com o triângulo de atenção amarelo.

Encontre esta referência => remova-a => adicione-a novamente

Isso consertou para mim. Espero que isto ajude


3

Visualize e verifique os caminhos de referência no seu csproj.

Eu removi as referências ao System.Web.Mvc (e outros) e as li para um caminho personalizado. C:\Project\OurWebReferences

No entanto, depois de fazer isso, o caminho de referência no csproj ainda não foi alterado. FOI

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

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

Os caminhos são apenas um exemplo.


3

Para mim, a solução era garantir que todos os projetos estivessem construindo para a mesma CPU - no meu caso x86


2

Copiar Local = True foi resolvido para um dos meus projetos. Mas em outro projeto, recebo o mesmo erro, tentei definir Copy Local = true, mas isso não resolve o meu problema. Alterar a estrutura de destino de 4.5.1 para 4.5 em Propriedades do projeto ajudou com isso.


2

Fiz algo realmente estúpido (e talvez você também).

Eu estava tentando ligar System.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html é um espaço para nome e não uma classe e eu não li minha mensagem de erro tão bem, então interpretei meu erro como a classe Htmlnão existe no espaço para nome System.Web.Mvc e foi assim que terminei aqui em cima (estúpido eu sei).

Tudo o que eu precisava fazer era adicionar uma instrução using @using System.Web.Mvc.Htmlà minha página e depois @Html.Partialtrabalhar como esperado.


O Visual Studio 2015 sinalizará o uso como não necessário, mas se você o remover, ocorrerá erros como: "O tipo ou nome do espaço para nome 'Helpers' não existe no espaço para nome 'Microsoft.Web' (você está ausente uma referência de montagem?) ".
justdan23

1

se alguma das opções acima não resolver o problema, defina as propriedades do System.Web.Mvc.dll para copiar a local ture.

vai resolver


1

Eu tive o mesmo problema, mas no meu caso foi originado por outro fator. Escrevo isso para ajudar outras pessoas com o mesmo problema. Eu tenho soluções com vários projetos. dois deles trabalham com o System.Web.Mvc, normalmente nossa referência apontava para pacotes externos onde controlávamos a versão usada. Por alguma razão, uma das referências do projeto vai para o GAC e aponta para a dll do GAC (versão 4.0.0.1) e o programa obteve o erro. Para corrigi-lo:

Verifique se as referências ao System.Web.Mvc apontam para a mesma dll no mesmo caminho de diretório.

Espero que ajude.


1

Eu apaguei System.Web.dll da pasta Frolder do meu site.


eu sou o meu caso sim. Eu estava mudando para o ramo antigo sem MVC. E System.Web.dll na pasta Bin quebrou minha imagem.
precisa saber é o seguinte

1

Eu tive esse problema, configurar a cópia local como ligado e desligado etc. não funcionou. O projeto não estava usando nuget, portanto, correções que estavam fora de questão também.

A correção para mim foi instalar o MVC 3 (o que fiz através do instalador da plataforma web).

Eu suspeito que isso se tornará mais uma solução para as pessoas, pois a estrutura .net continua avançando e as pessoas não têm o material MVC mais antigo instalado.


1

É provável que definir sua DLL como CopyLocal / true ou qualquer outra correção importante para corrigir esse problema, mas aqui está outro exemplo que me pegou por 20 minutos de tempo perdido.

Quando você adiciona seus espaços de nome ao seu Views / Web.config, verifique se eles foram casados ​​corretamente:

  <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, então muitas pessoas parecem estar enfrentando esse problema. Meu problema foi causado por referências com caminhos para as pastas bin de outros projetos ou referenciando DLLs de pastas do sistema. O projeto tinha cerca de 6 anos e os desenvolvedores anteriores haviam decidido que era dessa maneira que eles iam fazer referência a suas bibliotecas.

A solução foi passar por todas as referências e verificar os caminhos, depois remover a referência e adicioná-la usando o NuGet. Para qualquer pacote que não estivesse no NuGet, criei outra pasta ao lado dos pacotes e coloquei a DLL no mesmo layout que o NuGet faria.

Eu também tive que examinar os arquivos de configuração e garantir que a versão correta dos pacotes estivesse sendo usada. Um processo longo e doloroso!


1

Eu tenho um projeto que faz isso sempre que construo com o modo de exibição aberto. Assim que fechei a exibição, o erro desapareceu e a compilação foi bem-sucedida. Muito estranho.


0

Eu tive o mesmo problema, nenhuma das soluções funcionou para mim. Finalmente, removi System.Web.MVCe adicionei novamente. Então tudo voltou ao normal e meu problema foi resolvido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.