Por que o System.Web.Mvc não está listado em Adicionar referências?

132

Usando C #, Visual Studio 2010.

Há um espaço para nome chamado System.Web.Mvc documentado no MSDN. A documentação para todos os tipos nesse espaço de nome diz que eles estão System.Web.Mvc.dll.

No entanto, quando vou para Adicionar referência, guia ".NET", esse assembly está ausente na lista. Por quê?

Timwi
fonte
1
Você pode esclarecer: seu projeto FUNCIONA sem essa referência? Está no seu web.config (veja minha resposta)?
Básico
4
Não estou trabalhando em nenhum projeto. Eu só queria ajudar alguém aqui no StackOverflow. Normalmente, adiciono uma referência para analisar o IntelliSense e / ou o F12 para qualquer tipo. Nesse caso, a montagem desejada estava faltando na lista, então perguntei o porquê.
Timwi
1
NOTA aos leitores desta página - a partir de hoje (09-02-2015) o método para resolver isso mudou com o tempo - leia todas as respostas - várias versões do VS.NET e .NET framework movem o código referenciado pelo MVC para para lugares diferentes.
Qxotk

Respostas:

106

No VS Express 2012, não consegui encontrar o System.Web.Mvc na guia "assemblies", mas, depois de algumas pesquisas, descobri que precisava examinar a guia " assemblies \ extensions " em vez do padrão "assemblies \ framework" " aba.

jahu
fonte
1
+1 para você, porque você encontrou a causa raiz do problema que tive. Eu escolhi usar o método de instalação do NuGet proscrito abaixo e comentarei lá o que fiz.
Qxotk
Eu tentei esse método no Visual Studio Community 2015, mas recebi um erro de tempo de execução relacionado à incompatibilidade de versão ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). Eu tenho outro projeto na minha solução referenciando uma versão diferente, e esse método só me permitiu adicionar uma referência ao System.Web.Mvc, Version = 4.0.0.0. O método de instalação do NuGet adicionou a versão correta
NJS
101

A melhor maneira é usar o gerenciador de pacotes NuGet.

Basta atualizar o pacote MVC abaixo e ele deve funcionar.

insira a descrição da imagem aqui

sandeep talabathula
fonte
4
Eu tenho que admitir que essa é a maneira correta de adicionar referência ao MVC na maioria dos casos (você deve evitar os problemas de execução do aplicativo fora do Visual Studio que referências ruins podem causar). No entanto, em grandes soluções que já contêm alguns projetos do MVC, o uso de "Gerenciar pacotes NuGet para solução" para instalar a mesma versão da biblioteca é ainda melhor. O motivo é que, se você apenas instalá-los a partir do gerenciador de pacotes do NuGet, pode acabar com a incompatibilidade de versão (o gerente geralmente oferece a versão mais recente).
jahu
2
Usei essa solução para um projeto usando o MVC 4 que não pôde ser compilado com o Visual Studio 2015. Ele também garante que as bibliotecas do projeto sejam uniformes em todos os desenvolvedores.
ceetheman
1
Eu tive esse problema com uma caixa que tinha apenas o VS2015, enquanto outros membros da equipe tinham o VS2013 - o que pode fazer com que eles façam referência ao local antigo (sem erros de compilação) enquanto eu não tinha o código e os erros de compilação. De notar, a partir de hoje, não consegui encontrar o Microsoft.Web.Mvc - que foram as referências que causaram o problema. Na resposta do @forderah, esclarece o fato de que o nome é diferente no NuGet. Microsoft.Web.Mvc agora é Microsoft.AspNet.Mvc, que também extrai as dependências listadas em sua resposta.
Qxotk
1
Eu até tive esse problema no VS2017, e isso foi corrigido. Não sei por que VS2017 me disse que ele acha que o conjunto que precisa ser referenciada é System.Web.Mvc enquanto ele está realmente à procura de Microsoft.AspNet.Mvc
Michael Davidson
60

Eu tive o mesmo problema e não foi possível localizar o assembly de referência System.Web.MVC.

Finalmente descobri e estava localizado dentro do seguinte local.

Observe se o seu VS foi instalado em C: (Às vezes, o MVC.dll não está no local padrão sobre o qual todos falam, refiro-me à pasta " Assemblies de referência " localizada na unidade C:).

se não estiver lá, definitivamente deveria estar aqui:

\ Arquivos de programas (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Portanto, adicione a DLL através da navegação ou da guia Procurar no menu Adicionar referência.

Patrick Hofman
fonte
1
Isso obtém a referência para mim, embora eu tenha certeza de que já adicionei essa referência na lista Assemblies de estrutura.
Zarepheth 26/03
9
Solução não muito boa se você trabalha em equipe com o VCS. Caminhos absolutos são maus neste caso.
Denis The Menace
Concordo definitivamente que esta é uma solução ruim em qualquer tipo de ambiente de desenvolvimento de equipe devido à dependência absoluta do caminho codificado.
Craig
A maneira de contornar isso é garantir que todos estejam usando o mesmo caminho para a DLL. Não deve ser um problema se todos os membros da equipe tiverem as montagens instaladas nesse local, como deveriam. Como alternativa, a DLL pode ser copiada desse caminho e colocada diretamente no projeto, para que ele tenha um caminho relativo. Mas de qualquer maneira, apenas ter a localização de onde está essa DLL, é um bom ponto de partida.
vapcguy
Isso realmente ajudou; mas a Microsoft deveria ter feito isso muito mais limpo e fácil ....
JosephDoggie
28

Você também pode adicionar isso no Nuget Package Manager Console, algo como:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.20710.0 -ProjectName XXXXX

Microsoft.AspNet.Mvc tem dependências em:

  • 'Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && <2.1)'
  • 'Microsoft.Web.Infrastructure (≥ 1.0.0.0)'
  • 'Microsoft.AspNet.Razor (≥ 2.0.20710.0 && <2.1)'

... o que não me parece nada demais. No nosso caso, esta é uma biblioteca de classes que existe apenas para fornecer suporte para nossos aplicativos Mvc. Então, achamos que é uma dependência benigna na pior das hipóteses.

Definitivamente, prefiro isso a apontar para um assembly no sistema de arquivos ou no GAC, pois a atualização do pacote no futuro provavelmente será muito menos dolorosa do que as experiências que tive com as referências de assemblies do GAC e do sistema de arquivos no passado.

fordareh
fonte
1
Eu usei esse método e concordo em não usar caminhos absolutos locais nas referências. Usei o gerenciador de pacotes NuGet, adicionando o pacote e as dependências corrigidas na caixa somente VS2015.
Qxotk
11

Eu tive o mesmo problema e aqui está o motivo engraçado: Meu palpite é que você espera System.Web.Mvcestar localizado emSystem.Web na lista. Mas a lista não é alfabética.

Primeiro, classifique a lista e depois olhe perto da System.Web.

Alican
fonte
1
Verifique também se está obtendo a versão correta. No meu caso, System.Web.Mvc v2 e v4 estão lá, e eles também não estão próximos um do outro.
TTT
Teve o mesmo problema ao encontrar o System.Web.Mvc pelos mesmos motivos. Fui com o Microsoft.AspNet.Mvc, garantindo a verificação do que os outros projetos em minha solução estavam usando em relação ao número da versão.
Qxotk
5

"OK, adicionar esse XML ao Web.config funciona, mas não responde à pergunta"

Deveria estar lá. Por padrão, a lista de adição de referências parece ter sido solicitada, mas não é o caso. Bata no cabeçalho do nome e olhe novamente.

eglasius
fonte
Não costumo dizer "esta assembléia está faltando na lista", a menos que eu tenha certeza disso.
Timwi
@ Timwi, imaginei, mas dada a outra resposta, que há muito pouca chance de que ele não esteja lá com o vs 2010 instalado e que, no meu caso, eu sempre encontrei o que eu precisava na lista de referências sem nunca pressionar o cabeçalho de nome que tinha. para dizer ... de fato, agora eu sei por que nunca precisei antes e no vs 2010, sim - veja o primeiro comentário: weblogs.asp.net/scottgu/archive/2009/10/29/…
eglasius
Você está dizendo que clicar no cabeçalho Nome classifica as coisas para você? Não faz nada aqui na minha máquina ...
Roman Starkov
1
@romkyns só funciona após o carregamento de todas as montagens da lista.
eglasius
5

Verifique estes passos:

  1. Verifique se o MVC está instalado corretamente.
  2. Verifique a propriedade do projeto e veja qual é o Target Framework do projeto. Se a estrutura de destino não estiver definida como .Net Framework 4, defina-a.

Nota : se a estrutura de destino estiver definida como .Net Framework 4 Client Profile, ela não listará a referência do MVC na lista de referências. Você pode encontrar diferentes entre o .Net Framework 4 e o .Net Framework 4 Client Profile aqui .

O .NET Framework 4 Client Profile é um subconjunto do .NET Framework 4 otimizado para aplicativos clientes. Ele fornece funcionalidade para a maioria dos aplicativos clientes, incluindo os recursos Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) e ClickOnce. Isso permite uma implantação mais rápida e um pacote de instalação menor para aplicativos que têm como alvo o .NET Framework 4 Client Profile.

Iman
fonte
Essa foi uma boa dica. Quando fui às propriedades do meu projeto, ele listou apenas o .NET Core 1 e 2. Nenhum .NET Framework 4.x. Estava faltando assembléias na minha lista. Acontece que foi assim que construí meu projeto - escolhi a opção errada - usar o .NET Core em vez do .NET Framework. Agora eu sei a diferença. :)
vapcguy
4

Resolvi esse problema pesquisando "mvc". O System.Web.Mvc apareceu nos resultados da pesquisa, apesar de não estar contido na lista.

zety
fonte
3

A montagem desejada apareceu na lista agora.

Só posso especular o que fez com que ele aparecesse, mas suspeito que tenha sido o ArquivoNovoProjetoAplicativo Web ASP.NET , o que nunca havia feito antes. É possível que isso tenha causado algum tipo de inicialização tardia e a lista seja preenchida com assemblies adicionais para o desenvolvimento da Web.

Timwi
fonte
sempre esteve sempre lá, tudo bem: P ... veja o comentário que eu adicionei à minha resposta, no link que diz: "O problema com a guia .net, é enquanto o assíncrono está acontecendo e está sendo atualizado, seu sem classificar em ordem alfabética ... "... que é um novo comportamento em relação a 2010, nunca percebi isso até ver sua pergunta.
eglasius
@egl Acabei de testar na minha máquina aqui (VS2010) e ela não está na lista. Eu recebo conjuntos diferentes de assemblies, dependendo do Target Framework, mas este nunca está lá.
Roman Starkov
@romkyns tente direcionar o .net 4 e faça o que eu mencionei na minha resposta. Além disso, certifique-se de dar tempo suficiente para carregar, pois ele faz uma carga assíncrona.
eglasius
2

Isso mudou para o Visual Studio 2012 (sei que a pergunta original diz VS2010, mas o título ainda será exibido nas pesquisas).

Quando você cria um projeto VS2012 MVC, o system.web.mvc é colocado na pasta packages, que é semelhante à solução. Isso será referenciado no projeto da Web por padrão e você pode encontrar o caminho exato lá).

Se você quiser fazer referência a isso em um projeto secundário (por exemplo, uma DLL de suporte com filtros ou outros atributos), poderá fazer referência a partir daí.

Prof Von Lemongargle
fonte
2

Não recebi o System.Web.Mvc no VS 2012, mas o obtive no VS 2013. Usando a caixa de diálogo AddReference, insira a descrição da imagem aqui

Ou, você pode encontrar isso no caminho do projeto,

YourProjectName \ packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

Md Shahriar
fonte
Ótima dica mostrando onde encontrar o caminho do projeto existente. THX!
Alan
0

Acredito que você encontrará que o assembly MVC é referenciado no arquivo web.config, não no próprio projeto.

Algo assim:

<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.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Para responder ao seu comentário;

A melhor resposta que posso dar é daqui :

O elemento add adiciona uma referência de montagem a ser usada durante a compilação de um recurso dinâmico. O ASP.NET vincula automaticamente esse assembly ao recurso ao compilar cada módulo de código.

Basic
fonte
OK, adicionar esse XML ao Web.config funciona, mas não responde à pergunta.
Timwi
"funciona", pois fornece o intellisense? Eu editei minha resposta
Básico
0

ele pode ser instalado separadamente e não está incluído no framwork, escolha "extensões" da lista de guias e existe e existem outras bibliotecas, tudo está ok, não é necessário usar bibliotecas antigas, etc., existem antigas 20 30 e 4001

user1005462
fonte
0

Se você encontrou esse problema no Visual Studio 2017, é provável que esteja trabalhando com um projeto MVC 4 criado em uma versão anterior do VS com um caminho de dica de referência apontando para C:\Program Files (x86)\Microsoft ASP.NET. O Visual Studio 2017 não instala mais este diretório.

Geralmente, resolvemos isso instalando uma cópia do Visual Studio 2015 ao lado de nossa instância de 2017 e que instala as bibliotecas necessárias no caminho acima. Em seguida, atualizamos todas as referências nos projetos afetados e estamos prontos.

JD Mallen
fonte