Vb.net 如何在运行时加载引用了另一个程序集的程序集

Vb.net 如何在运行时加载引用了另一个程序集的程序集,vb.net,dll,reference,runtime,Vb.net,Dll,Reference,Runtime,我正在用WPF/VB.NET开发一个可扩展软件,它从扩展文件夹加载DLL,创建DLL实例,并从中添加用户控件。但在某个扩展中,我必须添加另一个程序集的引用,当我加载该程序集时,它就不起作用了。我该怎么办?我想出来了 我的项目从本地Extensions文件夹加载程序集(即扩展程序集),但扩展引用的程序集没有加载。这段代码解决了加载扩展的引用程序集的问题,其中一些问题由GAC解决 包含在Application.vb中 Private WithEvents域为AppDomain=AppDomain.C

我正在用WPF/VB.NET开发一个可扩展软件,它从扩展文件夹加载DLL,创建DLL实例,并从中添加用户控件。但在某个扩展中,我必须添加另一个程序集的引用,当我加载该程序集时,它就不起作用了。我该怎么办?

我想出来了

我的项目从本地Extensions文件夹加载程序集(即扩展程序集),但扩展引用的程序集没有加载。这段代码解决了加载扩展的引用程序集的问题,其中一些问题由GAC解决

包含在Application.vb中

Private WithEvents域为AppDomain=AppDomain.CurrentDomain
私有函数DomainCheck(ByVal sender作为对象,ByVal e作为ResolveEventArgs)作为程序集处理Domain.AssemblyResolve
如果e.Name.包含(“.resources”),则
一无所获
如果结束
如果不存在IO.Directory.Exists(“.\ExtReferences”),则
IO.Directory.CreateDirectory(“.\ExtReferences”)
如果结束
Dim_Assembly=AppDomain.CurrentDomain.GetAssemblys().FirstOrDefault(函数(a)a.FullName=e.Name)
如果_Assembly不是空的,则返回_Assembly
Dim文件名=e.Name.Split(“,”)(0)+“.dll”.ToLower()
Dim asmFile=IO.Path.Combine(“.\”,“外部引用”,文件名)
尝试
返回Assembly.LoadFrom(asmFile)
特例
结束尝试
一无所获
端函数
我还提出了一个扩展需要访问WinRT的特殊情况:(

包含在(vb/cs)项目文件中


假的
$(MSBuildProgramFiles32)\Reference Assembly\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
$(MSBuildProgramFiles32)\Windows工具包\10\UnionMetadata\10.0.17763.0\Windows.winmd

因此,我所有的问题都解决了!

其他程序集在哪里?请参阅。如果您的其他程序集在GAC中,则您将不会有问题(因此它不是)。您可以始终处理AssemblyResolve事件,并使用方法4通过探测定位程序集,如果您知道文件的位置,则指向该文件。它是一个Windows.md引用。扩展名需要引用WinRT,因此我必须在加载扩展名时添加Windows.md作为引用。它工作正常,谢谢!