Ignorer les liens de navigationAccueil : Introduction au Framework .NET : Architecture d'une application .NET : Assemblages fortement nommés et GAC Ignorer les liens de navigation
Accueil
Introduction au Framework .NETDévelopper Introduction au Framework .NET
Le langage C#Développer Le langage C#
Programmation orientée objetsDévelopper Programmation orientée objets
CollectionsDévelopper Collections
ADO.NETDévelopper ADO.NET
LINQDévelopper LINQ
ASP.NETDévelopper ASP.NET
Workflow FoundationDévelopper Workflow Foundation
Besoins de prestationDévelopper Besoins de prestation

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 :

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é.

Assemblage fortement nommé
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.

Informations de l'assemblage
Création d'un fichier de nom fort

Un fichier unecle.snk a été crée dans le projet.

Contenu d'un fichier de nom fort

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.

Ajout d'une reference
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 =