Creare una libreria .dll in VB Net

In Visual Basic .Net è possibile creare una libreria di classi e compilarla in un file .dll
Questo file potrà poi essere incluso in altri progetti i quali avranno a disposizione tutte le classi, i tipi di dato personalizzati ecc definiti nella dll senza però poter vedere il codice sorgente.

Una dll creata in VBNet è utilizzabile anche in progetti .Net creati usando altri linguaggi come C#.

Creare una Class Library

Creare un nuovo progetto di tipo Class Library in Visual Studio:

Per evitare eventuali conflitti dei nomi delle classi è meglio impostare fin da subito il namespace:

Solution Explorer >> Doppio click su My Project >> Application >> Root Namespace

Per questo esempio ho creato una semplice classe chiamata VSProject con alcune proprietà in lettura e scrittura.
In una applicazione reale è più probabile avere tanti metodi e meno proprietà.

Public Enum ProjectType
    WindowsForm = 0
    WebForm = 1
    WebService = 2
    ClassLibrary = 3
    WebUserControl = 4
End Enum

Public Enum VSVersion
    VS2005 = 0
    VS2008 = 1
    VS2010 = 2
    VS2012 = 3
End Enum

Public Class VSProject
    Private _Name As String
    Private _Path As String
    Private _Type As ProjectType = ProjectType.WindowsForm
    Private _VSVersion As VSVersion = SRB_Dev_oClock.VSVersion.VS2010
    Private _Description As String

    Public Property Name As String
        Get
            Return _Name
        End Get
        Set(value As String)
            _Name = value
        End Set
    End Property
    Public Property Path As String
        Get
            Return _Path
        End Get
        Set(value As String)
            _Path = value
        End Set
    End Property
    Public Property Type As ProjectType
        Get
            Return _Type
        End Get
        Set(value As ProjectType)
            _Type = value
        End Set
    End Property
    Public Property VSVersion As VSVersion
        Get
            Return _VSVersion
        End Get
        Set(value As VSVersion)
            _VSVersion = value
        End Set
    End Property
    Public Property Description As String
        Get
            Return _Description
        End Get
        Set(value As String)
            _Description = value
        End Set
    End Property
End Class

Una soluzione Visual Studio può contenere più progetti.  Per testare comodamente la classe (o meglio la class library) appena creata si può aggiungere un progetto di tipo Web Form alla stessa soluzione.

Solution Explorer >> Tasto destro sulla soluzione >> Add >> New Project >> Aggiungere un progetto Windows Form

Affinché il progetto Windows Form possa vedere e quindi usare le classi definite nella libreria, è necessario aggiungere il riferimento. Una volta aggiunto il riferimento, questo apparirà nella finestra di Esplora Soluzione.

Tasto destro sul progetto Windows Form >> Add Reference >> .Net >> Selezionare il progetto Class Library >> Ok

L'ultimo passaggio consiste nell'importare il namespace.
Ecco un esempio di utilizzo della classe:

Imports SRB_Dev_oClock

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim myProject As VSProject
        myProject = New VSProject

        myProject.Name = "Test Web Form"
        myProject.Path = "c:\inetpub\wwwroot\test1"
        myProject.Type = ProjectType.WebForm
        myProject.VSVersion = VSVersion.VS2010
        myProject.Description = "Sito web di prova"
    End Sub
End Class

Ora si può impostare il progetto Windows Form come progetto di partenza e fare i test necessari per assicurarsi che la libreria funzioni come ci si aspetta.
Una volta terminato il lavoro, compilare la libreria facendo tasto destro sul progetto >> Build. In questo modo si genera un file con estensione .dll all'interno della cartella /bin/Debug del progetto.

Usare la libreria .dll in un altro progetto

Il file .dll creato in precedenza è quindi utilizzabile da altri progetti.
Per prima cosa occorre copiare la dll nel pc dove si sta creando il progetto.

Poi creare un nuovo progetto Windows Form, e aggiungere il riferimento alla dll.

Solution Explorer >> Tasto destro sul progetto >> Add >> Reference >> Browse >> Selezionare il file .dll

Ora le classi definite nella dll sono utilizzabili come se fossero state definite nel progetto stesso. La sola differenza è che non si può vedere il codice sorgente. Anche in questo caso è necessario importare il namespace.

Imports SRB_Dev_oClock

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim myProject As VSProject = New VSProject()
        myProject.Name = "Prova nome Progetto"
        Label1.Text = myProject.Name
    End Sub
End Class

Rendere le dll sicure

Può capitare che due sviluppatori che non si conoscono creino due .dll con lo stesso nome. Oppure possono esistere più versioni della stessa dll, magari non retrocompatibili. Dal nome del file è difficile essere sicuri di stare lavorando sulla libreria corretta.

In passato sono sorti talmente tanti problemi che si è coniato il termine DLL Hell.
Per ovviare a questi problemi è possibile firmare l’assembly tramite il comando SN (Strong Name) lanciato dalla Shell di Visual Studio. Questo meccanismo a chiave pubblica e privata serve ad essere sicuri della provenienza della dll che si sta utilizzando.

Per far convivere diverse versioni della stessa dll oppure dll omonime è necessario registrarle nel GAC (Global Assembly Cache) del pc. Per ulteriori informazioni fare riferimento alla documentazione ufficiale.

E’ chiaro che questi problemi sorgono in scenari business di medio-grandi dimensioni, mentre per un semplice programma o per dei test non è necessario firmare l’assembly.

Autore: Sergio Roberto Boarina