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?