Accueil : Introduction au Framework .NET : Architecture d'une application .NET : Assemblages fortement nommés et GAC
Assemblages fortement nommés et GAC
Malgré le titre barbare de cette section, nous allons expliquer ici un des concepts fondamentaux dans le fonctionnement des assemblages. Tout d’abord, nous allons observer la situation avant l’apparition des applications .NET.
Le problème posé est le suivant : avec le fonctionnement utilisé précédemment, une DLL utilisée par plusieurs applications doit être déployée dans le répertoire de chaque application. Si on ne souhaite pas déployer la DLL dans le répertoire de chaque application, il faut déployer l’assemblage dans le GAC (Global Assembly Cache). Le GAC est l’emplacement dans Windows où on place les assemblages partagés ce qui permet à chaque application .NET d’utiliser l’assemblage sans avoir une copie dans le dossier de l’application.
Le GAC ne peut héberger que des DLL qui sont des assemblages fortement nommés. Un assemblage fortement nommé ou encore « Strongly Named Assembly » est un assemblage qui possède :
- Un nom (c’est le cas de tout assemblage)
- Une signature cryptographique unique et infalsifiable
- Un numéro de version
- Eventuellement une culture, c’est-à-dire une version spécifique à une langue.
Pour créer la clé cryptographique, on peut utiliser la commande sn.exe avec l’option –k du SDK du Framework .NET ou encore utiliser Visual Studio 2008.
Nous allons créer un projet en mode console simple qui va être quasiment identique à celui de la section précédente mais en utilisant Visual Studio 2008. Nous ferons de l’assemblage utilisé par l’application un assemblage fortement nommé.
- Lancez Visual Studio 2008
- Créez un projet de type Windows Forms Application
- Nommez la solution SolutionCalculatriceCS pour C# ou SolutionCalculatriceVB pour Visual Basic .NET.
- Cliquez sur le bouton OK
- Dans le menu File, choisissez la commande Add, Ajouter puis New project.
- Choisissez Class Library comme modèle de projet.
- Nommez le projet CalculatriceDLL.
- Cliquez sur le bouton OK.
- Supprimez le fichier Class1.cs ou Class1.vb de la solution en le sélectionnant puis en utilisant la touche SUPP.
- Cliquez droit sur le projet CalculatriceDLL puis sur Add et enfin Class
- Nommez la classe Calc puis cliquez sur le bouton OK.
- Implémentez la classe comme ci-dessous
:
C#
public class
Calc
{
public static
int Additionner(int
a, int b)
{
return a + b;
}
public static
string GetVersion()
{
return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
VB.NET
Public Class Calc
Public Shared
Function Additionner(ByVal
a As Integer,
ByVal b As
Integer) As
Integer
Return (a + b)
End Function
Public Shared
Function GetVersion()
As String
Return
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
End
Function
End
Class
La méthode GetVersion() a pour but de renvoyer le numéro de version de l’assemblage sous forme d’une chaîne.
Nous allons positionner le numéro de version de l’assemblage puis signer l’assemblage.
- Cliquez droit sur le projet CalculatriceDLL puis sur Properties.
- Dans la page de propriétés de l’assemblage, cliquez sur le bouton Assembly Information.
- Dans la boîte de dialogue Assembly Information, spécifiez comme version 2.0.0.0.
- Cliquez sur le bouton OK.
- Dans la page de propriétés de l’assemblage, sélectionnez l’onglet Signing.
- Cochez la case Sign the assembly
- Dans la liste déroulante Choose a strong name key file, choisir New.
- Dans la boîte de dialogue Create strong name key, décochez la case Protect my key file with a password.
- Spécifiez unecle dans le champ Key file name.
- Cliquez sur le bouton OK.
Un fichier unecle.snk a été crée dans le projet.
- Double-cliquez sur le fichier unecle.snk pour observer son contenu.
Le fichier contient une clé publique et une clé privée au format RSA.
Il nous reste à mettre en place l’exécutable qui va exploiter l’assemblage.
- Cliquez droit sur le projet Calculatrice puis sur Add reference.
- Dans la boîte de dialogue Add reference, sélectionnez l’onglet Projects.
- Sélectionnez CalculatriceDLL.
- Cliquez sur le bouton OK.
- Pour C#, implémentez la classe Program.cs comme ci-dessous :
C#
using System;
using CalculatriceDLL;
namespace Calculatrice
{
class Program
{
static void
Main(string[] args)
{
Console.WriteLine("Version de l'assemblage utilise: "
+ Calc.GetVersion());
Console.Write("Entrez la valeur de a:");
int a = int.Parse(Console.ReadLine());
Console.Write("Entrez la valeur de b:");
int b = int.Parse(Console.ReadLine());
int c = Calc.Additionner(a,
b);
Console.WriteLine("{0} + {1} = {2}", a, b, c);
}
}
}
VB.NET
Imports
CalculatriceDLL
Module
Module1
Sub Main()
Console.WriteLine("Version de l'assemblage utilise:
" _
& Calc.GetVersion())
Console.Write("Entrez la valeur de a:")
Dim a
As Integer =
Integer.Parse(Console.ReadLine)
Console.Write("Entrez la valeur de b:")
Dim b
As Integer =