formation universitaire à.net: les assemblages formation universitaire à.net: les assemblages ©...
TRANSCRIPT
Formation universitaire Formation universitaire à .NET:à .NET:
Les assemblagesLes assemblages
© © Patrick SmacchiaPatrick Smacchiahttp://www.smacchia.com
© Patrick Smacchia/Microsoft Research Cambridge 2004
Les supports (cours et lab) de cette formation peuvent être utilisés gratuitement dans le cadre de tout enseignement à but non lucratif.
Contacter moi avant toute utilisation non personnelle de ces supports : [email protected]
Les assemblages 2
PlanPlan
Notion de moduleNotion de moduleAnatomie des modules Anatomie des modules LAB1LAB1 : csc.exe et l’outil ildasm.exe : csc.exe et l’outil ildasm.exeAssemblages à noms fortsAssemblages à noms fortsLAB2LAB2 : signature numérique : signature numériqueGlobalisation et assemblages Globalisation et assemblages
satellitessatellites
Les assemblages 3
Notion de moduleNotion de module
Un assemblage est un concept logique.Un assemblage est un concept logique. Physiquement, un assemblage est constitué Physiquement, un assemblage est constitué
de plusieurs fichiers appelés de plusieurs fichiers appelés modulesmodules.. Les modules peuvent soit contenir du code, Les modules peuvent soit contenir du code,
soit contenir des ressources, soit les deux. soit contenir des ressources, soit les deux. • Extensions des modules avec du code: Extensions des modules avec du code: .exe .dll .netmodule
• Extensions des modules sans code (appelés Extensions des modules sans code (appelés modules ressourcesmodules ressources) : ) : .resources .jpg .txt …
Tous les modules d’un assemblage doivent Tous les modules d’un assemblage doivent se situer dans le même répertoire.se situer dans le même répertoire.
Notion de module
Les assemblages 4
Pourquoi la notion de Pourquoi la notion de modules?modules?
80% du temps est passé dans 20% du 80% du temps est passé dans 20% du code. Il se peut que certains modules ne code. Il se peut que certains modules ne soient jamais chargés.soient jamais chargés.
Inclusions logiques (et pas physique) de Inclusions logiques (et pas physique) de fichiers ressources dans un assemblage.fichiers ressources dans un assemblage.
Possibilité d’avoir un module par culture Possibilité d’avoir un module par culture supportée.supportée.
Possibilité d’utiliser un langage par Possibilité d’utiliser un langage par module: un assemblage peut donc être module: un assemblage peut donc être écrit en plusieurs langages .NET.écrit en plusieurs langages .NET.
Notion de module
Les assemblages 5
Le module avec le Le module avec le manifestemanifeste
Chaque assemblage a un module Chaque assemblage a un module particulier:particulier: Ce module référence tous les autres modules. Ce module référence tous les autres modules.
Ce référencement se fait dans une section Ce référencement se fait dans une section physique appelée physique appelée manifestemanifeste..
Lorsque le CLR charge l’assemblage, il Lorsque le CLR charge l’assemblage, il commence toujours par charger ce module.commence toujours par charger ce module.
Ce module est d’extension Ce module est d’extension .exe ou ou .dll. Il . Il détermine donc si l’assemblage est un détermine donc si l’assemblage est un exécutable ou une librairie. Aucun autre exécutable ou une librairie. Aucun autre module ne peut avoir l’extension module ne peut avoir l’extension .exe ou ou .dll. .
Notion de module
Les assemblages 6
Références entre Références entre assemblages assemblages
Un assemblages peut utiliser des types ou Un assemblages peut utiliser des types ou des ressources définis dans un autre des ressources définis dans un autre assemblage.assemblage.
Ces assemblages doivent être fournis lors Ces assemblages doivent être fournis lors de la fabrication du module avec le de la fabrication du module avec le manifeste. Les références vers ces manifeste. Les références vers ces assemblages sont physiquement assemblages sont physiquement contenues dans le manifeste.contenues dans le manifeste.
Ex: Compilateur C# Ex: Compilateur C# csc.execsc.exe /r:Asm.dll /addmodule:Mod.netmodule Foo.cs
Notion de module
Les assemblages 7
L’outil al.exeL’outil al.exe
al.exe : Assembly Linker : Assembly Linker Outil en ligne de commande.Outil en ligne de commande. al.exe permet de réunir des fichiers au permet de réunir des fichiers au
sein d’un même assemblage.sein d’un même assemblage. al.exe ne fait que fabriquer un module ne fait que fabriquer un module
d’extension d’extension .dll contenant le manifeste. contenant le manifeste. al.exe fabrique donc des assemblages fabrique donc des assemblages
sans code CIL.sans code CIL. Ex:Ex: al.exe /out:en-US\Chaines.Resources.dll
/c:en-US /embed:en-US\Chaines.en-US.resources
Notion de module
Les assemblages 8
PlanPlan
Notion de moduleAnatomie des modulesAnatomie des modules LAB1LAB1 : csc.exe et l’outil ildasm.exe : csc.exe et l’outil ildasm.exeAssemblages à noms fortsAssemblages à noms fortsLe mécanisme de signature retardéeLe mécanisme de signature retardéeLAB2LAB2 : signature numérique : signature numériqueGlobalisation et assemblages Globalisation et assemblages
satellitessatellites
Les assemblages 9
Anatomie d’un moduleAnatomie d’un module Un module qui contient du code CIL Un module qui contient du code CIL
contient obligatoirement une section contient obligatoirement une section physique appelée physique appelée métadonnées de métadonnées de typestypes. Les données de cette section . Les données de cette section décrivent les types contenus dans le décrivent les types contenus dans le module. On parle d’auto-description.module. On parle d’auto-description.
Un module qui contient du code peut aussi Un module qui contient du code peut aussi contenir des ressources (option contenir des ressources (option /resources de de csc.exe))
Anatomie des modules
Les assemblages 10
Utilisation de csc.exeUtilisation de csc.exe
csc.exe /target:module Foo2.cs /resource:Images.jpg
csc.exe /Addmodule:Foo2.netmodule /LinkResource:Foo3.resources
Foo1.cs
Assemblage
Foo1.exe
Métadonnées de type
Manifeste
contient notamment une référence vers Foo2 et une référence vers Foo3.resources
Code CIL des méthodes des types
Foo2.netmodule
Métadonnées de type
Code CIL des méthodes des types
Foo3.resources
Resources (Image.jpg)
Anatomie des modules
Les assemblages 11
Les métadonnées Les métadonnées d’assemblagesd’assemblages
Deux types de métadonnées:Deux types de métadonnées:• Les métadonnées de types, contenues dans tous Les métadonnées de types, contenues dans tous
modules contenant du code CIL.modules contenant du code CIL.• Les métadonnées d’assemblages, contenues Les métadonnées d’assemblages, contenues
dans le manifeste.dans le manifeste.
Les métadonnées d’assemblages = 4 tables:Les métadonnées d’assemblages = 4 tables:• AssemblyDefAssemblyDef: nom, version, culture…: nom, version, culture…• FileDefFileDef: une entrée par module: une entrée par module• ManifestResourcesDefManifestResourcesDef: une entrée par ressource: une entrée par ressource• ExportedTypeDefExportedTypeDef: Une entrée par type publique: Une entrée par type publique
Anatomie des modules
Les assemblages 12
Les attributs .NET Les attributs .NET d’assemblagesd’assemblages
Classes utilisables dans le code source Classes utilisables dans le code source pour positionner les informations relatives pour positionner les informations relatives à l’assemblage. Ces infos seront stockées à l’assemblage. Ces infos seront stockées dans les métadonnées d’assemblage.dans les métadonnées d’assemblage.
Exemple d’attributs d’assemblage :Exemple d’attributs d’assemblage :AssemblyCompany AssemblyCompany AssemblyProduct AssemblyProduct AssemblyDescription AssemblyDescription AssemblyVersionAssemblyVersion AssemblyCulture AssemblyCulture AssemblyCopyrightAssemblyCopyright
Exemple d’utilisation:Exemple d’utilisation:using System.Reflection;[assembly: AssemblyCompany("L’entreprise")] [assembly: AssemblyProduct("Le produit @@")]
Anatomie des modules
Les assemblages 13
Les métadonnées de Les métadonnées de typestypes
Contient des tables de définitions:Contient des tables de définitions:TypeDefTypeDef (Une entrée par type défini dans le (Une entrée par type défini dans le module) module) MethodDefMethodDef FieldDefFieldDef PropertyDefPropertyDef……
Contient des tables de références:Contient des tables de références:AssemblyRefAssemblyRef (Une entrée par assemblage (Une entrée par assemblage utilisé par ce module) utilisé par ce module) ModuleRefModuleRef TypeRefTypeRef MemberRefMemberRef
Contient des tas:Contient des tas:#string#string (nom des méthodes…) (nom des méthodes…) #user #user (chaîne (chaîne de caractères) de caractères) #blob#blob (signature des méthodes) (signature des méthodes)
Les specs définissent un numéro unique à Les specs définissent un numéro unique à chacune de ces tables et tas (sur 1 octet) chacune de ces tables et tas (sur 1 octet)
Exemple: la table Exemple: la table MethodDefMethodDef à le numéro 6 à le numéro 6
Anatomie des modules
Les assemblages 14
.method /*06000001*/ public hidebysig static void Main() cil managed{ .entrypoint // Code size 11 (0xb) .maxstack 1 IL_0000: ldstr "Hello world!" /* 70000001 */ IL_0005: call void [mscorlib/* 23000001 */] System.Console/* 0100000F */::WriteLine(string) /* 0A00000E */ IL_000a: ret
} // end of method Prog::Main
using System;class Prog{ public static void Main() { Console.WriteLine( "Hello world!"); }}
Les jetons de Les jetons de métadonnéesmétadonnées Identifiants 4 octets placés au sein du code CIL Identifiants 4 octets placés au sein du code CIL
pour référencer les entités (premier octet = pour référencer les entités (premier octet = numéro de table ou de tas) numéro de table ou de tas)
Anatomie des modules
Conséquence: pas d’adresse Conséquence: pas d’adresse physiques dans l’assemblage, physiques dans l’assemblage, indépendance totale face au matériel indépendance totale face au matériel sous-jacentsous-jacent
Les assemblages 15
PlanPlan
Notion de moduleAnatomie des modules Anatomie des modules LAB1LAB1 : csc.exe et l’outil : csc.exe et l’outil
ildasm.exeildasm.exeAssemblages à noms fortsAssemblages à noms fortsLAB2LAB2 : signature numérique : signature numériqueGlobalisation et assemblages Globalisation et assemblages
satellitessatellites
Les assemblages 16
PlanPlan
Notion de moduleAnatomie des modules Anatomie des modules LAB1LAB1 : csc.exe et l’outil ildasm.exe : csc.exe et l’outil ildasm.exeAssemblages à noms fortsAssemblages à noms fortsLAB2LAB2 : signature numérique : signature numériqueGlobalisation et assemblages Globalisation et assemblages
satellitessatellites
Les assemblages 17
Qu’est ce qu’un nom Qu’est ce qu’un nom fort?fort?
Le nom d’un assemblage est qualifié Le nom d’un assemblage est qualifié de fort ssi l’assemblage est signé de fort ssi l’assemblage est signé numériquement.numériquement.
En conséquence, un assemblage à En conséquence, un assemblage à nom fort est mathématiquement nom fort est mathématiquement infalsifiable.infalsifiable.
Concrètement, si une entité prétend Concrètement, si une entité prétend avoir développée un assemblage qui avoir développée un assemblage qui a un nom fort, on a un moyen de a un nom fort, on a un moyen de vérifier si cela est vrai. vérifier si cela est vrai.
Assemblages à noms forts
Les assemblages 18
L’algorithme RSAL’algorithme RSA
L’algorithme RSA se base sur un ensemble de L’algorithme RSA se base sur un ensemble de fonctions mathématiques bijectives. Chacune fonctions mathématiques bijectives. Chacune de ces fonctions est définie par la donnée de de ces fonctions est définie par la donnée de 2 nombres A et B:2 nombres A et B:• Si on connaît A, on peut calculer f(x) pour tout x.Si on connaît A, on peut calculer f(x) pour tout x.• Si on connaît B, on peut calculer x pour tout f(x).Si on connaît B, on peut calculer x pour tout f(x).• Si on ne connaît pas B, on ne peut pas calculer x Si on ne connaît pas B, on ne peut pas calculer x
pour tout f(x).pour tout f(x). Applications:Applications:
• Echange de messages cryptés.Echange de messages cryptés.• Authentification d’un fichier par signature Authentification d’un fichier par signature
numérique.numérique.
Assemblages à noms forts
Les assemblages 19
La signature numériqueLa signature numériqueAssemblages à noms forts
Assemblage
Foo1.exe
Métadonnées de type
Manifeste
Code IL
Assemblage
Foo1.exe
Métadonnées de type
Manifeste
Code IL
Clé publique
Signature numérique
Valeur de hachage = x
Signature numérique = f(x)
Cles.snk
A (Clé publique)
B (Clé privée)
Les assemblages 20
sn.exe ; jeton de clé sn.exe ; jeton de clé publiquepublique
L’algorithme de hachage (SHA-1 ou MD5) L’algorithme de hachage (SHA-1 ou MD5) produit une valeur d’une vingtaine d’octets.produit une valeur d’une vingtaine d’octets.
L’utilitaire L’utilitaire sn.exe permet de produire des permet de produire des couples clé privé (436 octets) clé publique couples clé privé (436 octets) clé publique (128 octets).(128 octets).
L’attribut L’attribut AssemblyKeyFile permet de permet de référencer le fichier contenant les clés.référencer le fichier contenant les clés.
Le nom fort de l’assemblage ne contient Le nom fort de l’assemblage ne contient pas la clé publique mais un jeton de clé pas la clé publique mais un jeton de clé publique, sur 8 octets.publique, sur 8 octets.b03f5f7f11d50a3a jeton de Microsoft.b77a5c561934e089 jeton de l’ECMA.
Assemblages à noms forts
Les assemblages 21
Signature retardéeSignature retardée
Le fichier contenant les clés Le fichier contenant les clés publique/privé doit rester confidentiel.publique/privé doit rester confidentiel.
Pour éviter de fournir ce fichier aux Pour éviter de fournir ce fichier aux développeurs, développeurs, sn.exe (option (option -p) ) permet de produire un fichier ne permet de produire un fichier ne contenant que la clé publique.contenant que la clé publique.
La signature est rajoutée à La signature est rajoutée à l’assemblage ultérieurement avec l’assemblage ultérieurement avec sn.exe (option (option –R).).
Assemblages à noms forts
Les assemblages 22
PlanPlan
Notion de moduleAnatomie des modules Anatomie des modules LAB1LAB1 : csc.exe et l’outil ildasm.exe : csc.exe et l’outil ildasm.exeAssemblages à noms fortsLAB2LAB2 : signature numérique : signature numériqueGlobalisation et assemblages Globalisation et assemblages
satellitessatellites
Les assemblages 23
PlanPlan
Notion de moduleAnatomie des modules Anatomie des modules LAB1LAB1 : csc.exe et l’outil ildasm.exe : csc.exe et l’outil ildasm.exeAssemblages à noms fortsAssemblages à noms fortsLAB2LAB2 : signature numérique : signature numériqueGlobalisation et assemblages Globalisation et assemblages
satellitessatellites
Les assemblages 24
DéfinitionsDéfinitions Une culture = association une langue/ un paysUne culture = association une langue/ un pays
fr-FR en-US en-UK …fr-FR en-US en-UK … La plupart des applications doivent être utilisable La plupart des applications doivent être utilisable
par des personnes issues de cultures différentes. par des personnes issues de cultures différentes. C’est la globalisation d’une application.C’est la globalisation d’une application.
Pour gérer la globalisation, .NET autorise Pour gérer la globalisation, .NET autorise d’accompagner une application avec des d’accompagner une application avec des assemblage spéciaux, un par culture. Ce sont es assemblage spéciaux, un par culture. Ce sont es assemblages satellites. assemblages satellites.
Chaque assemblage satellite contient les Chaque assemblage satellite contient les ressources pour sa culture, chaîne de caractères, ressources pour sa culture, chaîne de caractères, images…images…
Globalisation et assemblages satellites
Les assemblages 25
Editer les ressourcesEditer les ressources Il existe trois formats de fichier pour contenir les Il existe trois formats de fichier pour contenir les
ressources:ressources:• Des fichiers textes Des fichiers textes .txt, qui ne contiennent pas d’image , qui ne contiennent pas d’image
(utilisé lors du développement).(utilisé lors du développement).• Des fichiers XML Des fichiers XML .resx qui peuvent contenir des images qui peuvent contenir des images
encodées en encodées en base64base64 (utilisé lors du développement). Visual (utilisé lors du développement). Visual Studio .NET est adapté à l’utilisation des fichiers Studio .NET est adapté à l’utilisation des fichiers .resx..
• Des fichiers binaires Des fichiers binaires .resources utilisés à la compilation. utilisés à la compilation. On passe d’un format à un autre avec l’utilitaire On passe d’un format à un autre avec l’utilitaire resgen.exe : :resgen.exe en-US\Chaines.txt en-US\Chaines.en-US.resources
Avec l’option Avec l’option /resource de de csc.exe on peut aussi on peut aussi insérer des ressources directement dans insérer des ressources directement dans l’assemblage avec du code mais ceci est déconseillé.l’assemblage avec du code mais ceci est déconseillé.
Globalisation et assemblages satellites
Les assemblages 26
Compiler un assemblage Compiler un assemblage satellitesatellite
Un assemblage satellite ne contient pas de code. Un assemblage satellite ne contient pas de code. Il faut le compiler avec l’outil Il faut le compiler avec l’outil al.exe qui va qui va construire un fichier d’extension .dll contenant les construire un fichier d’extension .dll contenant les métadonnées d’assemblage:métadonnées d’assemblage:al.exe /out:en-US\Chaines.Resources.dll
/c:en-US /embed:en-US\Chaines.en-US.resources Lors du déploiement, les assemblages satellites Lors du déploiement, les assemblages satellites
doivent être dans un répertoire nommé par la doivent être dans un répertoire nommé par la culture.culture.
Avec l’option Avec l’option /resource de de csc.exe on peut on peut aussi insérer des ressources directement dans aussi insérer des ressources directement dans l’assemblage avec du code (et ainsi se passer des l’assemblage avec du code (et ainsi se passer des assemblages satellites) mais ceci est déconseillé.assemblages satellites) mais ceci est déconseillé.
Globalisation et assemblages satellites
Les assemblages 27
Exploiter les ressourcesExploiter les ressources
Il faut utiliser la classe Il faut utiliser la classe System.Resources.ResourceManager prévue à cet effet::
...Assembly A = Assembly.Load("chaines.resources,culture=en-US");ResourceManager RM = new ResourceManager("chaines.en-US",A);string s = RM.GetString("Bonjour");Console.WriteLine(s);
...System.Drawing.Image Im = (Image) RM.GetObject("UneImage");string s = (string) RM.GetObject("Bonjour");
...
Globalisation et assemblages satellites
Les assemblages 28
Question?Question?
Mots clésMots clés : module, module ressource, : module, module ressource, manifeste, métadonnées de types, manifeste, métadonnées de types, métadonnées d’assemblages, jeton de métadonnées d’assemblages, jeton de métadonnées, attribut .NET d’assemblage, métadonnées, attribut .NET d’assemblage, nom fort, RSA, signature numérique, nom fort, RSA, signature numérique, signature retardée, jeton de clé publique, signature retardée, jeton de clé publique, ressource, globalisation, culture ressource, globalisation, culture
Acronymes Acronymes ::• al.exe : Assembly Linkeral.exe : Assembly Linker• csc.exe : C# compilercsc.exe : C# compiler• sn.exe : strong namesn.exe : strong name• resgen.exe : resource géneratorresgen.exe : resource génerator