Динамическое подключение DLL, которая в свою очередь использует другие DLL - Visual Basic .NET
Формулировка задачи:
Здравствуйте!
Направьте на путь истинный, как поступить след. образом:
Пишу небольшое приложение, которое юзает стороннее DLL из системной папки, при добавлении в references стандартным способом, VS подтягивает в папку с проектом еще 4 DLL вместе с выбранным. Они все связаны между собой.
Т.к. на компах юзеров эти DLL всегда расположены по одному пути, решил попытаться подключать библиотеки через Reflection.Assembly.LoadFile.
Но дальше знаний не хватает: при попытке получить GetExportedTypes выдает исключение "Could not load file or assembly %название DLL%".
Как подключить все эти 4 DLL динамически, чтобы основная могла к ним обращаться?
Решение задачи: «Динамическое подключение DLL, которая в свою очередь использует другие DLL»
textual
Листинг программы
Imports System.Reflection Imports MyDll Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim Domain As AppDomain = AppDomain.CurrentDomain AddHandler Domain.AssemblyResolve, AddressOf MyResolveEventHandler F() End Sub Private Sub F() Dim MyFunc As MyDll.GetData Dim result As String = MyFunc(Param) End Sub Function MyResolveEventHandler(ByVal sender As Object, ByVal args As ResolveEventArgs) As [Assembly] 'This handler is called only when the common language runtime tries to bind to the assembly and fails. 'Retrieve the list of referenced assemblies in an array of AssemblyName. Dim objExecutingAssemblies As [Assembly] objExecutingAssemblies = [Assembly].GetExecutingAssembly() Dim arrReferencedAssmbNames() As AssemblyName arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies() 'Loop through the array of referenced assembly names. Dim strAssmbName As AssemblyName For Each strAssmbName In arrReferencedAssmbNames 'Look for the assembly names that have raised the "AssemblyResolve" event. If (strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(",")) = args.Name.Substring(0, args.Name.IndexOf(","))) Then 'Build the path of the assembly from where it has to be loaded. Dim strTempAssmbPath As String strTempAssmbPath = "C:\assemblies\" & args.Name.Substring(0, args.Name.IndexOf(",")) & ".dll" Dim MyAssembly As [Assembly] 'Load the assembly from the specified path. MyAssembly = [Assembly].LoadFrom(strTempAssmbPath) 'Return the loaded assembly. Return MyAssembly End If Next Return Nothing End Function End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д