Puis-je appeler dynamiquement un assembly de version .Net supérieure à partir de l'assemblage de la version .Net inférieure? Peut-être que je devrais utiliser le langage DLR embarqué (Iron Python)?Appel dynamique de l'assembly .Net-version arbitraire
Répondre
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.
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>
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
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. –
- 1. Appel de cgi.FieldStorage pour une URL arbitraire
- 2. Appel de fonction dynamique (appliquer)
- 3. Appel de fonction dynamique PHP
- 4. Powershell - Appel de fonction dynamique
- 5. fonction dynamique PHP appel
- 6. Appel d'une fonction dynamique
- 7. appel dynamique fonction javascript
- 8. Appel de fonction dynamique avec paramètres dynamiques en Javascript
- 9. appel statique vs appel dynamique: Lequel a de meilleures performances?
- 10. Appel de fonction de bibliothèque dynamique
- 11. Appel dynamique de méthodes de classes PHP
- 12. Appel dynamique d'une DLL COM
- 13. C# dynamique appel dll gettype
- 14. Appel dynamique méthode dans C#
- 15. Python, appel dynamique du script
- 16. Appel dynamique d'une fonction statique?
- 17. JQuery: Appel dynamique d'une fonction
- 18. Appel de méthode dynamique sans constructeur connu?
- 19. Appel de méthode dynamique dans POO
- 20. Appel de méthode dynamique dans Objective-C
- 21. Appel de méthode statique dynamique en PHP?
- 22. C++: Appel de fonction virtuelle dynamique
- 23. Appel dynamique aux ensembles de messages?
- 24. appel de la fonction dynamique ruby
- 25. Appel dynamique de la méthode d'implémentation
- 26. Appel dynamique d'une variable statique (tableau)
- 27. appel dynamique d'un objet avec sous-obejcts
- 28. Grailles: appel dynamique d'une autre action
- 29. appel fonction dynamique en utilisant la réflexion
- 30. Appel dynamique des cibles Ant dans Jenkins
Et comment invoquer une méthode arbitraire de cet objet (par exemple la méthode statique)? – macropas
Soit par réflexion ou par une interface partagée. – CodingBarfield