Temos um antigo aplicativo da Web ASP.NET MVC 3, construído em VS2010, que falha ao compilar, desde a atualização de segurança da semana passada.
O problema é que a referência a System.Web.Mvc.dll está interrompida.
Quando abro o arquivo de solução em nossa máquina de compilação, onde a atualização de segurança não foi executada, e abro a caixa de diálogo de propriedades para References-> System.Web.MVC, parece ótimo.
O caminho é C: \ Arquivos de programas \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll A versão é 3.0.0.0
Mas quando eu abro o arquivo de solução em uma máquina de desenvolvimento onde a atualização de segurança foi executada, References-> System.Web.MVC é sinalizado como ausente. Se eu removê-lo e tentar adicioná-lo novamente usando a caixa de diálogo Adicionar Referência do VS2010, ele não aparecerá.
Andar pela web me levou a sugestões envolvendo a atualização do MVC usando o NuGet. Não usamos NuGet, em nossos projetos VS2010, então isso não parece muito certo, para esta situação. Eu tentei mesmo assim e acabei com meia dúzia de referências faltando.
Quando vejo as propriedades de "C: \ Arquivos de programas \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" no Windows Explorer, na máquina de construção vejo a versão 3.0.0.0.
Quando vejo as propriedades na máquina dev, vejo a versão 3.0.50813.1.
O que eu preciso é uma maneira de mudar a maneira como eu construo e executo para que eu possa construir e executar independentemente de qual dessas duas DLLs está instalada na estrutura .NET 3.0.
Ideias?
O que eu tentei que não funcionou
Primeira tentativa - se o conjunto estiver faltando, adicione-o. Excluí a antiga referência ausente. Então copiei a DLL da pasta "ASP.NET MVC3 \ Assemblies" para uma pasta no meu projeto. Defina-o como "Copiar sempre" e adicione-o como referência.
Com isso, o projeto seria compilado no VS2010, mas quando tentei pré-compilar as páginas com aspnet_compiler, recebi avisos:
(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
Até agora, consegui evitar o entendimento das políticas de tempo de execução, mas tentei adicionar isso, no web.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Tentei novamente e recebi os mesmos avisos.
Minha pergunta é - ainda tenho um problema? Ou será que vou resolver isso, apesar dos avisos?
fonte
Respostas:
Obtenha a versão mais recente do MVC3 via NuGet. Abra seu projeto no Dev Studio. Abra a guia Package Manager Console na parte inferior do Dev Studio. Em seguida, use este comando:
Se você clicar na tecla tab após "-Version", obterá uma lista de todas as versões disponíveis.
Se você tiver uma versão antiga do NuGet, poderá obter um erro indicando que precisa atualizá-la. Nesse caso, abra Ferramentas-> Extension Manager para instalar a versão mais recente do NuGet. Observe que você precisará executar o Dev Studio como administrador antes de instalar o NuGet.
A instalação do MVC3 deve atualizar o Web.config em seu projeto.
fonte
Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstall
é mais explícito, instala a versão que você possui para aquele projeto e evita que ele toque em outros projetos (se desejado).MVC 5
C: \ Arquivos de programas (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll
MVC 4
C: \ Arquivos de programas (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll
MVC 3
C: \ Arquivos de programas (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll
MVC 2
C: \ Arquivos de programas (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll
Onde posso encontrar System.Web.MVC dll em um sistema onde o MVC 3 está instalado?
fonte
A maneira mais fácil de resolver esse problema é instalar a ASP.NET MVC 3 do instalador da Web Platforms.
http://www.microsoft.com/web/downloads/
Ou usando o comando Nuget
fonte
no VS 2017 eu limpei a solução e a reconstruí e consertei
fonte
Tenho a mesma situação: Visual Studio 2010, sem NuGet instalado e um aplicativo ASP.NET usando System.Web.Mvc versão 3.
O que funcionou para mim foi definir cada projeto C # que usa System.Web.Mvc, ir para Referências no Gerenciador de Soluções e definir propriedades em System.Web.Mvc, com Copiar Local como verdadeiro e Versão Específica como falso - o último fez com que o campo Versão mostrasse a versão atual naquela máquina.
fonte
Tive esse problema no vs2017, já obtive MVC via nuget, mas System.Web.Mvc não apareceu na lista "Assemblies" em "Add Reference".
A solução foi selecionar "Extensões" em "Assemblies" na caixa de diálogo "Adicionar Referência".
fonte
No meu caso, tive todas as referências adequadas no meu projeto. Descobri que, ao construir a solução, os pacotes nuget foram restaurados automaticamente.
fonte
A amostra mvcmusicstore.codeplex.com aberta em vs2015 perdeu algumas referências, uma delas System.web.mvc.
A correção para isso foi removê-lo das referências e adicionar uma referência: escolha Extensões em Assemblies, onde você pode encontrar e adicionar System.Web.Mvc.
(Os outros assemblies que adicionei com os pacotes nuget.)
fonte
Para o caso de alguém estar numa posição onde obtém o mesmo erro. No meu caso, fazer o downgrade do Microsoft.AspNet.Mvc e depois atualizá-lo novamente ajudou. Tive esse problema depois de instalar o Glimpse e removê-lo. System.Web.Mvc tinha referências erradas de alguma forma, limpar a solução ou reconstruí-la não funcionou no meu caso. Experimente se nenhuma das respostas acima funcionar para você.
fonte
Adicione a referência novamente de ./packages/Microsoft.AspNet.Mvc.[version]/lib/net45/System.Web.Mvc.dll
fonte