Risoluzione di assembly in fase di progettazione

Secondo un'idea comune, l'aggiunta di un riferimento a un assembly tramite la scheda .NET della finestra di dialogo Aggiungi riferimento si riferisce a un assembly nella Global Assembly Cache (GAC).In realtà non è così.Il riferimento riguarda di fatto un assembly di riferimento intermedio, ovvero un assembly che contiene tutte le informazioni sul tipo e sulla firma, ma che non contiene necessariamente codice.Nella scheda .NET sono elencati gli assembly di riferimento corrispondenti agli assembly di runtime in .NET Framework.Sono inoltre elencati gli assembly di riferimento corrispondenti agli assembly di runtime nelle cartelle AssemblyFoldersEx registrate utilizzate da terzi.

Multitargeting

Visual Studio 2012 consente di specificare come destinazione versioni di .NET Framework eseguite in Common Language Runtime (CLR) versione 2.0 o 4.Include le versioni di .NET Framework 2,0, 3,0, 3,5, 4 e 4,5 e versioni 1,0, 2,0 e 3,0 di Silverlight.Se viene rilasciata una nuova versione di .NET Framework basata su CLR versione 2.0 o 4, il framework può essere installato tramite un Targeting Pack, dopo di che verrà automaticamente visualizzato come destinazione in Visual Studio.

Funzionamento della risoluzione dei tipi

In fase di esecuzione CLR risolve i tipi nell'assembly eseguendo ricerche nella GAC, nella directory bin e in tutti i percorsi di sondaggio.Questa operazione è gestita dal caricatore Fusion.Ma come può il caricatore Fusion sapere cosa sta cercando?Ciò dipende da una risoluzione effettuata in fase di progettazione, quando l'applicazione viene compilata.

Durante la compilazione, il compilatore risolve i tipi dell'applicazione tramite assembly di riferimento.In.NET Framework versioni 2,0, 3,0, 3,5, 4 e 4,5, gli assembly di riferimento sono installati con.NET Framework.

Nel caso di .NET Framework versione 4.5, gli assembly di riferimento sono inclusi nel Targeting Pack fornito con la versione corrispondente di .NET Framework SDK.Il framework in sé fornisce soltanto gli assembly di runtime.Per compilare le applicazioni è necessario installare sia .NET Framework che la versione corrispondente di .NET Framework SDK.

Quando si sceglie come destinazione una versione di .NET Framework specifica, il sistema di compilazione risolve tutti i tipi tramite gli assembly di riferimento contenuti nel Targeting Pack.In fase di esecuzione, il caricatore Fusion risolve questi stessi tipi negli assembly di runtime, che in genere si trovano nella GAC.

Se gli assembly di riferimento non sono disponibili, il sistema di compilazione risolve i tipi degli assembly tramite gli assembly di runtime.Poiché gli assembly di runtime nella GAC non sono distinti da numeri di versione secondaria, è possibile che la risoluzione verrà eseguita nell'assembly errato.Questo può accadere, ad esempio, se si fa riferimento a un nuovo metodo introdotto in .NET Framework versione 3.5 avendo come destinazione la versione 3.0.La compilazione avrà esito positivo e l'applicazione verrà eseguita nel computer di compilazione; l'esito sarà però negativo in caso di distribuzione in un computer in cui non è presente la versione 3.5.

Il Targeting Pack fornito ora con .NET Framework SDK include un elenco di tutti gli assembly di runtime contenuti in quella versione del framework, definito elenco di ridistribuzione (redist).Grazie a questo elenco diventa impossibile, per il sistema di compilazione, risolvere i tipi a fronte di una versione dell'assembly errata.

Vedere anche

Altre risorse

Concetti avanzati relativi a MSBuild