2011-06-15 5 views

Répondre

1

Bien sûr, vous pouvez, cette question devrait vous aider sur le chemin:

Loading .net 3.5 wpf-forms in a .net 2.0 application

Ou dans le code:

Dim dllPath As String = "C:\ProjectsTest\TestSolution\ActiveXUser\bin\Debug\TestControl.dll" 
If Not File.Exists(dllPath) Then 
    Return 
End If 

Dim loadedAssembly As [Assembly] = [Assembly].LoadFile(dllPath) 

Dim mytypes As Type() = loadedAssembly.GetTypes() 

Dim t As Type = mytypes(1) 
Dim obj As [Object] = Activator.CreateInstance(t) 

TestControl.dll peut contenir toutes les informations sur la version installée de .net.

+0

Et comment invoquer une méthode arbitraire de cet objet (par exemple la méthode statique)? – macropas

+0

Soit par réflexion ou par une interface partagée. – CodingBarfield

2

Un assembly ne possède pas de version .NET, il dispose d'une version de métadonnées. Ignorant les premiers, il y en a trois distincts dans la nature. Respectivement les versions qui sont sorties avec .NET 1.1, .NET 2.0 et .NET 4. Les versions intermédiaires, quelque chose entre 2.0 et 3.5 SP1, utilisent le format de métadonnées de la version 2.0.

En d'autres termes, la version CLR est ce qui compte vraiment. C'est pourquoi le code de @ Barfieldmv fonctionne, .NET 2.0 et .NET 3.5 utilisent la même version CLR. Cela manque de gaz sur un problème plus typique aujourd'hui, CLR version 2 ne peut pas charger un assembly qui a des métadonnées de la version 4. Vous devez exécuter le programme avec la version 4 CLR. Cela nécessite un fichier app.exe.config qui remplace la version CLR qui sera utilisée. Cela devrait ressembler à ceci:

<configuration> 
    <startup> 
     <supportedRuntime version="v4.0"/> 
    </startup> 
</configuration> 
+0

Bonne réponse! Mais pouvez-vous m'indiquer, est-il possible d'invoquer l'assemblage .Net 4 à partir de l'assemblage .Net 2.0/3.5 en utilisant un moteur de script? – macropas

+0

Non, il ne peut y avoir qu'une seule version du CLR dans un processus. La version 4 CLR a quelques solutions de contournement pour cette restriction, mais si vous avez chargé ce CLR alors vous n'auriez pas ce problème. –