Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages ©...

28
Formation universitaire Formation universitaire à .NET: à .NET: Les assemblages Les assemblages © © Patrick Smacchia Patrick Smacchia http:// 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. acter moi avant toute utilisation non personnelle de ces supports : [email protected]

Transcript of Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages ©...

Page 1: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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]

Page 2: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 3: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 4: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 5: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 6: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 7: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 8: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 9: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 10: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 11: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 12: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 13: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 14: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 15: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 16: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 17: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 18: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 19: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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)

Page 20: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 21: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 22: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 23: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 24: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 25: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 26: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 27: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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

Page 28: Formation universitaire à.NET: Les assemblages Formation universitaire à.NET: Les assemblages © Patrick Smacchia  © Patrick Smacchia/Microsoft.

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