Abbiamo una vecchia applicazione Web ASP.NET MVC 3, compilata in VS2010, che non riesce a compilarsi, dall'aggiornamento della sicurezza della scorsa settimana.
Il problema è che il riferimento a System.Web.Mvc.dll è interrotto.
Quando apro il file della soluzione sulla nostra macchina di compilazione, dove l'aggiornamento della sicurezza non è stato eseguito, e apro la finestra di dialogo delle proprietà per Riferimenti-> System.Web.MVC, sembra proprio a posto.
Il percorso è C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll La versione è 3.0.0.0
Ma quando apro il file della soluzione su una macchina di sviluppo in cui è stato eseguito l'aggiornamento di sicurezza, Riferimenti-> System.Web.MVC viene contrassegnato come mancante. Se lo rimuovo e provo ad aggiungerlo di nuovo utilizzando la finestra di dialogo Aggiungi riferimento di VS2010, non viene visualizzato.
Girovagare per il Web mi ha portato a suggerimenti sull'aggiornamento di MVC tramite NuGet. Non abbiamo usato NuGet, nei nostri progetti VS2010, quindi non sembra del tutto corretto, per questa situazione. Ho provato comunque e ho finito con una mezza dozzina di riferimenti mancanti.
Quando guardo le proprietà di "C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" in Windows Explorer, sulla macchina di compilazione vedo la versione 3.0.0.0.
Quando guardo le proprietà sulla macchina di sviluppo, vedo la versione 3.0.50813.1.
Quello di cui ho bisogno è un modo per cambiare il modo in cui compilo ed eseguo in modo da poter creare ed eseguire indipendentemente da quale di queste due DLL sia installata nel framework .NET 3.0.
Idee?
Quello che ho provato non ha funzionato
Primo tentativo: se l'assieme manca, aggiungilo. Ho cancellato il vecchio riferimento mancante. Quindi ho copiato la DLL dalla cartella "ASP.NET MVC3 \ Assemblies", in una cartella del mio progetto. Impostalo come "Copia sempre" e aggiunto come riferimento.
Con ciò, il progetto sarebbe stato compilato in VS2010, ma quando ho provato a precompilare le pagine con aspnet_compiler, ho ricevuto degli avvisi:
(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
Finora sono riuscito a evitare di comprendere le politiche di runtime, ma ho provato ad aggiungere questo, nel 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>
Ho provato di nuovo e ho ricevuto gli stessi avvertimenti.
La mia domanda è: ho ancora un problema? O lo risolverò, nonostante gli avvertimenti?