Atualização do Windows fez com que o MVC3 e o MVC4 parassem de funcionar

126

eu sou o único que instalou o Windows Update (8.1) em 15 de outubro e, de repente, o MVC parou de funcionar devido a esse aviso?

Aviso 1 Não foi possível resolver esta referência. Não foi possível localizar o assembly "System.Web.Mvc, versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL". Verifique se a montagem existe no disco. Se essa referência for exigida pelo seu código, você poderá obter erros de compilação.

Parece que esta atualização do Windows instala uma versão mais recente do MVC com o número da versão 4.0.0.1 e remove a versão antiga da pasta de arquivos do programa.

Alguém sabe como consertar isso sem rastrear para cada projeto?

Iogurte
fonte
De onde é a referência? O GAC? Conjuntos de referência ou pepita?
blowdart
1
Leia o blog da Microsoft sobre o assunto. (Graças a e4rthdog para ligar a isso, apenas comentando para obter mais visibilidade)
Hanna
1
Lembre-se de que você também precisará editar o web.config em seus ambientes de produção.
Capitão Kenpachi

Respostas:

107

A melhor solução é atualizar a DLL para a versão 4.0.0.1. Tente usar nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

Isso será atualizado automaticamente

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

Você só precisa editar a versão System.Web.Mvc manualmente em:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Krzysztof Kalinowski
fonte
1
Sim, basta substituir a referência do GAC pela referência do NuGet. Trabalhou para nós.
abatishchev
7
Leia o blog da Microsoft sobre o assunto. (Graças a e4rthdog para ligar a isso, apenas comentando para obter mais visibilidade)
Hanna
10
Qualquer idéia de por que, depois de fazer o acima, recebo vários avisos: "ASPNETCOMPILER: warning CS1702: Assumindo a referência de montagem 'System.Web.Mvc, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' corresponde ' System.Web.Mvc, versão = 4.0.0.1, Cultura = neutra, PublicKeyToken = 31bf3856ad364e35 ', pode ser necessário fornecer a política de tempo de execução "?
Farinha
1
@ Farinha, tenho os mesmos avisos. Eu não posso afastá-los. Esses avisos reduzem o desempenho da compilação. Você encontrou uma maneira de consertar isso?
StefanHa
3
No @StefanHa, ainda não encontrei uma correção. Percebi que há várias referências ao 4.0.0.0 em todo o aplicativo, nos arquivos Web.config, dentro das pastas Views, mas mesmo depois de alterar manualmente todos eles, o aviso permanece.
Farinha
26

Tivemos que tocar manualmente em cada .csproj para atualizar a versão de 4.0.0.0 para 4.0.0.1 para dar continuidade às nossas compilações. Bastante dor.

Novas referências devem se parecer com:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Zach La Lond
fonte
3
Observe que a mesma alteração é necessária para o MVC 3.0, a referência deve ser "3.0.0.1" para que isso funcione novamente.
Andy
No meu caso isso foi necessário, e também precisava para indicar que "Versão específica" é "verdade"
pimbrouwers
24

Teve o mesmo problema após a atualização:

Atualização de segurança para o Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Mas apenas para o projeto com uma referência ao System.Web.Mvc, não instalado pelo pacote.

Meu colega, que não havia instalado o Microsoft ASP.NET MVC 4.0 Runtime e não recebeu a atualização, não teve problemas e ainda tinha a referência ao 4.0.0.0, e não ao 4.0.0.1 Alterei

manualmente a referência para 4.0.0 . 1 , após o check-in, meu colega ainda poderia criar com uma referência à 4.0.0. 0 .
(Trabalhando tanto no Win7 Pro SP1 quanto no VS2013 Pro Update 3)

mandíbulas
fonte
22

Por favor, consulte este blog, a maneira recomendada é atualizar o pacote NuGet correspondente:

http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Citar:

O problema pode ser resolvido implementando uma das seguintes soluções:

  1. (Preferencial) Instale Microsoft.AspNet.Mvc a partir da galeria NuGet (isso instalará um redirecionamento de ligação no seu web.config). Você pode fazer isso no gerenciador de pacotes NuGet ou no console do NuGet no Visual Studio:

    Pacote de Instalação Microsoft.AspNet.Mvc -Version -Project PROJECTNAME

    Versão do MVC 4: 4.0.40804.0

    Versão do MVC 3: 3.0.50813.1

  2. Atualize manualmente a referência ao System.Web.MVC.dll (não use o do GAC).

    Tente a caixa de diálogo Adicionar referência -> montagens -> extensões.

Miguel Lacouture
fonte
4

Para o projeto da web, pode ser necessário atualizar a configuração no web.config também:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1"/>
  </dependentAssembly>
THN
fonte
2

Você precisa alterar todas as referências ao System.Web.Mvc na sua solução. Apenas exclua-os e adicione a nova versão 4.0.0.1.

Também nas propriedades, mude copy localpara true.

E no web.config adicione a ligação assambly para apontar para a nova versão do mvc:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
Robert Benyi
fonte
O cenário CopyLocal=truenão nos ajudou; consulte: System.Web.MVCnão copiado para a binpasta desde MS14-059
Danny Tuppeny 20/10
1

OK,

Para mim, foram dois passos simples:

Primeiro mudei todas as referências para System.Web.Mvc de 4.0.0.0 para 4.0.0.1,

Então eu tive que ir para as propriedades do System.Web.Mvc (possivelmente porque eu o havia removido e adicionado novamente) e alterar a cópia local para true.

Espero que isso seja útil para alguém.

edencorbina
fonte
0

Se você ainda estiver recebendo o mesmo erro após tentar a solução @Krzysztof ou qualquer uma das outras respostas acima, uma solução alternativa que pode funcionar para você é desinstalar o MVC Runtime 4.0

Ricardo Sanchez
fonte