Outils de développement pour .NET Framework

Outils de développement pour .NET Framework

Implémentations

■ MicroSoft
’LGLHU’RQVH]2XWLOVGHGpYHORSSHPHQWSRXU1(7
• Commerciales
• .NET CLR
• Compact .NET CLR
• Code partagé
• « Rotor » : Shared Source CLI

3.6 Mloc ( 10,721 fichiers)

KWWS PVGQ PLFURVRIW FRP QHW VVFOL
• GC moins performant, JIT différent
• Une sous partie du Runtime (pas de WebForm, ADO, ASP.NET, …)
■ Mono
■ DotGNU Portable .NET

Compilateurs 8QGHU &RQVWUXFWLRQ

(Q &RQVWUXFWLRQ
■ MicroSoft
’LGLHU’RQVH]2XWLOVGHGpYHORSSHPHQWSRXU1(7
■ Mono
• Compilateur et JIT efficace
• Peu de processeurs
■ DotGNU
• GCC Front End
• Linux et dizaine d’OS
• Nombreux processeurs

Outils du SDK

’LGLHU’RQVH]2XWLOVGHGpYHORSSHPHQWSRXU1(7
■ Assembly Generation Utility (al.exe)
■ Assembly Registration Utility (gac.exe)
■ MSIL Assembler (ilasm.exe)
■ MSIL Disassembler (ildasm.exe)
■ C++ Compiler (cl.exe)
■ C# Compiler (csc.exe)
■ Visual Basic Compiler (vbc.exe)
■ J# Compiler (en extra)
■ PE File Format Viewer (dumpbin.exe)
■ Type Library Exporter (tlbexp.exe)
■ Type Library Importer (tlbimp.exe)
■ XML Schema Definition Tool (xsd.exe)
■ Shared Name Utility (sn.exe)
■ Web Service Utility (wsdl.exe)

Décompilateurs

■ MSIL Disassembler (Ildasm.exe)
• a companion tool to the MSIL Assembler (Ilasm.exe). Ildasm.exe takes a portable executable (PE) file that contains Microsoft intermediate language (MSIL) code and creates a text file suitable as input to Ilasm.exe.
Profilage 8QGHU &RQVWUXFWLRQ
(Q &RQVWUXFWLRQ
■ Identification
• des points chauds (ERWWOHQHFN KRW VSRW)
• des fuites mémoires …
■ Outils

Génération (ou émission) dynamique de code

Dynamic Proxy (Réseau, BD, …), …
■ namespace System.Reflection.Emit
• Permet la contruction d’assemblies, modules, classes à la volée
■ Voir
• http://www.dina.dk/~sestoft/rtcg/rtcg.pdf
• Rechercher Cisternino & Kennedy, Language independent program generation

Exemple de Génération de code (i)

private static 7\SH CreateHelloWorld(AppDomain appDomain, AssemblyBuilderAccess access) {
$VVHPEO\1DPH assemblyName = new AssemblyName(); assemblyName.Name = « EmittedAssembly »;
// Create the dynamic assembly.
$ VVHPEO\%XLOGHU assembly = appDomain.DefineDynamicAssembly(assemblyName, access);
’LGLHU’RQVH]2XWLOVGHGpYHORSSHPHQWSRXU1(7
// Create a dynamic module
0RGXOH%XLOGHU module= assembly.DefineDynamicModule(« EmittedModule »);
// Define a public class named « HelloWorld » in the assembly.
7\SH%XLOGHU helloWorldClass = module.DefineType(« HelloWorld », TypeAttributes.Public);
// Define a private String field named « Greeting » in the type. )LHOG%XLOGHU greetingField = helloWorldClass.DefineField(
« Greeting », typeof(String), FieldAttributes.Private);

Exemple de Génération de code (ii)

// Create the constructor.
Type[] constructorArgs = { typeof(String) };
&RQVWUXFWRU%XLOGHU constructor = helloWorldClass.DefineConstructor( MethodAttributes.Public, CallingConventions.Standard, constructorArgs);
’LGLHU’RQVH]2XWLOVGHGpYHORSSHPHQWSRXU1(7
// Generate IL for the method. The constructor calls its superclass constructor.
// The constructor stores its argument in the private field.
,/*HQHUDWRU constructorIL = constructor.GetILGenerator(); constructorIL.(PLW(2S&RGHV /GDUJB );
ConstructorInfo superConstructor = typeof(Object).GetConstructor(new Type[0]);
constructorIL.Emit(2S&RGHV &DOO, superConstructor); constructorIL.Emit(2S&RGHV /GDUJB ); constructorIL.Emit(2S&RGHV /GDUJB ); constructorIL.Emit(2S&RGHV 6WIOG, greetingField); constructorIL.Emit(2S&RGHV 5HW);

Outils de développement pour .NET FrameworkTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *