Bonjour


"Nouveau" sur VS.Net 2005, je suis en train de faire des tests de développement de plugins (sur base d'une interface réalisée en VB.Net 2003, ça ça fonctionne bien) à intégrer dans un frontal développé lui aussi en 2003.

Le hic : mon test montre que la classe compilée en VB.Net 2005 n'est pas "lisible" par le frontal en VB.Net 2003, malgré qu'elle soit bien basée sur une interface correcte

J'aurais pensé qu'on pouvait indépendamment "lire" des DLL quelle que soit la version du moment que l'interface utilisée soit la même...


En clair, j'ai :
- 1 exécutable MonAppli.exe (VB.Net 2003)
- 1 interface iPlugin.dll (VB.Net 2003)
- des plugins Plugin01.dll, Plugin02.dll, etc... développés en VB.Net 2003

Je veux rajouter de nouveaux plugins mais développés en VB.Net 2005 ! Et j'obtiens le message : "Le format du fichier Plugin2005.dll n'est pas valide"


Voici le code de chargement des plugins dans mon .exe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        '-------------------- CHARGEMENT DES PLUGINS --------------------
        Dim _oTypes() As Type                                                           'Liste de types
        Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
            System.Reflection.Assembly.GetCallingAssembly.Location)                     'Répertoire courant
        Dim _sPlugs() As String = IO.Directory.GetFiles(_sPluginDirectory, "GI*.dll")   'Filtre sur les DLL
 
        For Each _sPlug As String In _sPlugs
            'Pour chaque DLL du répertoire
            Try
                'Tentative de chargement de l'assembly
                Dim _oAss As System.Reflection.Assembly = _
                    System.Reflection.Assembly.LoadFrom(_sPlug)
                _oTypes = _oAss.GetTypes()
                For Each _oType As Type In _oTypes
                    'Pour chaque type contenu dans l'assembly
                    If Not _oType.GetInterface("GIAUBE.iPlugin") Is Nothing Then
                        'Plug-in trouvé !
                        'Création d'une instance du plugin pour récup des infos le concernant
                        Dim _Obj As Object = _oAss.CreateInstance(_oType.Namespace & "." & _oType.Name)
                        'Ajout de l'icône dans la ListImage et attribution à l'item dans la liste
                        _oChargement.SetLoading("Chargement du module " & CType(_Obj, iPlugin).Libellé & "...")
                        ilsIcones.Images.Add(CType(_Obj, iPlugin).Icone)
                        With _oLvwPlugins
                            'Ajout de l'élément correspondant dans le ListView
                            Dim _It As New ListViewItem(CType(_Obj, iPlugin).Libellé, ilsIcones.Images.Count - 1)
                            _It.SubItems.Add(_oType.Namespace & "." & _oType.Name)  'Type à implémenter
                            _It.SubItems.Add(CType(_Obj, iPlugin).Description)      'Description
                            _It.SubItems.Add(_sPlug)                                'Chemin DLL
                            _It.Tag = CType(_Obj, iPlugin).IDPlugin                 'ID module correspondant
                            .Items.Add(_It)
                        End With
                    End If
                Next
            Catch ex As Exception
                'Rien
                MsgBox(ex.Message)
            End Try
        Next
        '-------------------- FIN DU CHARGEMENT DES PLUGINS --------------------

Avez-vous une solution à ce problème ?