Résolution d'assemblys au moment du design
Lorsque vous ajoutez une référence à un assembly via l'onglet .NET de la boîte de dialogue Ajouter, les points de référence à un assembly de référence intermédiaire, autrement dit., un assembly qui contient toutes les informations de type et de signature, mais ne contient pas nécessairement de code. L'onglet .NET répertorie les assemblys de référence qui correspondent aux assemblys de runtime dans le .NET Framework. De plus, il répertorie les assemblys de référence correspondant aux assemblys de runtime dans les dossiers AssemblyFoldersEx enregistrés qui sont utilisés par des tiers.
Multi-ciblage
Visual Studio 2013 vous permet de cibler des versions du .NET Framework qui s'exécutent sur la version 2.0 ou la version 4 du CLR (Common Language Runtime). Cela inclut les versions 2.0, 3.0, 3.5, 4, 4.5 et 4.5.1 du .NET Framework et les versions 1.0, 2.0 et 3.0 de Silverlight. Si une nouvelle version du .NET Framework basée sur le CLR version 2.0 ou version 4 est publiée, le .NET Framework peut être installé à l'aide d'un pack de ciblage, et il apparaîtra automatiquement en tant que cible dans Visual Studio.
Fonctionnement de la résolution de types
Au moment de l'exécution, le CLR résout les types dans l'assembly en analysant le GAC, le répertoire bin et tous les chemins d'accès de détection. Cette procédure est gérée par le chargeur Fusion. Mais comment le chargeur Fusion sait-il ce qu'il doit rechercher ? Cela dépend d'une résolution effectuée au moment du design, lorsque l'application est générée.
Lors de la génération, le compilateur résout les types d'application à l'aide des assemblys de référence. Dans les versions 2.0, 3.0, 3.5, 4, 4.5, et 4.5.1 du .NET Framework, les assemblys de référence sont installés en même temps que le .NET Framework.
Les assemblys de référence sont fournis par le pack de ciblage contenu dans la version correspondante du Kit de développement .NET Framework SDK. Quant au .NET Framework, il fournit uniquement les assemblys de runtime. Pour générer des applications, vous devez installer à la fois le .NET Framework et le Kit de développement .NET Framework SDK correspondant.
Lorsque vous ciblez un .NET Framework spécifique, le système de génération résout tous les types en utilisant les assemblys de référence dans le pack de ciblage. Au moment de l'exécution, le chargeur Fusion résout ces mêmes types aux assemblys de runtime, qui se trouvent généralement dans le GAC.
Si les assemblys de référence ne sont pas disponibles, le système de génération résout les types d'assemblys à l'aide des assemblys de runtime. Étant donné que les assemblys de runtime dans le GAC ne sont pas distingués par des numéros de version mineure, il est possible que la résolution soit effectuée au mauvais assembly. Par exemple, ce problème peut se produire si une nouvelle méthode introduite dans le .NET Framework version 3.5 est référencée alors que la version 3.0 est ciblée. La génération réussira et l'application s'exécutera sur l'ordinateur de build, mais elle échouera en cas de déploiement sur un ordinateur où la version 3.5 n'est pas installée.
Le pack de ciblage, qui est maintenant fourni avec le Kit de développement .NET Framework SDK, inclut une liste de tous les assemblys de runtime (appelée liste de redistribution (redist)) dans cette version du .NET Framework. Cela empêche le système de génération de résoudre des types à partir d'une version incorrecte de l'assembly.