Visual Studio 2008 e 2010 si comportano diversamente quando si fa riferimento ad assembly nel file system?
Domanda
Vedo uno strano fenomeno in Visual Studio 2010.
La configurazione del mio progetto è questa (l'ho ereditata - non posso cambiarla a breve, sfortunatamente :-():
un'app Winforms che utilizza Crystal Reports X (v10) come motore di reporting;la CR X Developer Edition completa è installata sul mio dispositivo di sviluppo
diverse app Webforms che utilizzano Crystal Reports XI (v11) come motore di reporting - non è possibile installare la versione completa di CR XI, poiché è in conflitto con CR X Dev Edition....
Per far funzionare le cose sul nostro server di build, ho anche creato un file Library
all'interno della directory del progetto dell'app Winforms con i file runtime CR X di cui ho bisogno, oltre a un file Library
cartella all'interno della directory del progetto dell'app Web con i file di runtime CR XI.
In VS 2008, ho potuto selezionare gli assembly necessari dalla rispettiva cartella della libreria nei miei progetti Winforms (diverse librerie di classi, ecc.) e nelle mie app web.Tutto ha funzionato alla grande.
Quando ho aggiornato a Visual Studio 2010, ora all'improvviso vedo:
nelle mie app Winforms, tutti i riferimenti ai file runtime CR X vengono aggiornati automaticamente per utilizzare i file CR X dal GAC: questo è non quello che voglio!Non aiuta se elimino quei riferimenti e li aggiungo di nuovo accedendo al file
Library
cartella - quando li seleziono, VS2010 sembra convertirli nuovamente automaticamente in riferimenti GAC...nelle mie app Web, le cose peggiorano ancora:quando scelgo gli assembly runtime CR XI dal file
Library
cartella, ancora una volta, VS2010 sembra rilevare automaticamente che ci sono file simili (stesso nome, ma versioni diverse) nel GAC e utilizza invece quei file - ora le mie app Web non funzionano più .....
Che cavolo sta succedendo con VS 2010??Perché non può lasciare invariate le mie selezioni e lasciarmi scegliere i file di runtime da un file Library
cartella invece di insistere per andare al GAC??Cosa è cambiato tra VS 2008 e VS 2010 a questo riguardo?Qualcuno ha qualche intuizione in merito??
Soluzione
Potrebbe essere utile a entrambi
(1) vai a Strumenti\Opzioni\Project&Solutions\Build&Run e modifica la verbosità di MSBuild in "diagnostica", quindi crea e nella finestra di output controlla come funziona la logica di risoluzione dei riferimenti di MSBuild per tali assembly.Cioè, se VS non ha già fatto qualcosa di ridicolo al file .csproj sottostante
(2) confrontare l'XML nel file di progetto VS2008 con il file di progetto VS2010 per vedere cosa c'è nel file <Reference>
nodi
Un'ipotesi speculativa selvaggia:il progetto VS2010 ha come target ".NET 4.0 Client" (anziché ".NET 4.0 (framework completo)" e le librerie necessitano del framework completo e MSBuild vede questa dipendenza e utilizza la logica di fallback.