System.web.mvc ausente

89

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?

Jeff Dege
fonte
Você tentou atualizar todos os pacotes nuget para suas versões mais recentes (quando possível, é claro)?
Silvermind
1
Eu me pergunto se você está enfrentando o bug de atualização MS14-059 ...
Steven V
1
O aplicativo da web não possui nenhum pacote nuget. E sim, é o bug MS14-059.
Jeff Dege,
Estou tendo o que parece ser o mesmo problema, embora esteja usando o pacote nuget e a versão 4. Compila bem e tudo funciona, mas há mais de 20 avisos de compilação dos quais gostaria de me livrar.
Farinha

Respostas:

141

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:

PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

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.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" />
  </dependentAssembly>
</assemblyBinding>
3 pontos
fonte
1
Badabing !!!! passei horas nisso ... simples o suficiente para instalar a versão no Nuget pm .... muito obrigado !!!
Squ1rr3lz
Sim, o Nuget funciona com o Visual Studio 2010. Basta instalá-lo através do Extension Manager. No menu Ferramentas.
3spot
2
O Install-Package Microsoft.AspNet.Mvc resolveria o problema. Na verdade, não precisamos mencionar o número da versão
sujay kodamala
2
@sujaykodamala A configuração do número da versão é importante se você deseja instalar o MVC3 mais recente e não o MVC5 (versão mais recente do pacote).
3spot de
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).
Mike E
30

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?

Kirk
fonte
Obrigado, isso me ajudou a abrir o projeto direcionado para VS2010 no ano de 2018 :)
Aamol
23

A maneira mais fácil de resolver esse problema é instalar a ASP.NET MVC 3 do instalador da Web Platforms.

insira a descrição da imagem aqui

http://www.microsoft.com/web/downloads/

Ou usando o comando Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
Md. Alim Ul Karim
fonte
1
Isso resolveu meu problema que surgiu depois que mudei para um novo PC e tive um projeto com referências à dll da ASP.NET MVC 4 que ainda não tinha instalado na nova máquina.
clovola
3

no VS 2017 eu limpei a solução e a reconstruí e consertei

PBMe_HikeIt
fonte
2

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.

Dronz
fonte
1

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

t_warsop
fonte
0

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.

cal5barton
fonte
0

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

Bob Lokerse
fonte
0

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

Mehmet Can Erim
fonte
0

Adicione a referência novamente de ./packages/Microsoft.AspNet.Mvc.[version]/lib/net45/System.Web.Mvc.dll

Sajithd
fonte