0

给定一个 .NET DLL,它由一个类“Place”和一个返回整数的函数“Where”组成;我需要将 dll 加载到应用程序域中,执行函数并卸载应用程序域。


Dim domain As AppDomain = AppDomain.CreateDomain("Executor")            
Dim buffer() As Byte = IO.File.ReadAllBytes("c:\path\Locator.dll")
Dim asy As Assembly = domain.Load(buffer)
Dim obj As [Object] = asy.CreateInstance("Locator.Place")
Dim method As MethodInfo = obj.GetType.GetMethod("Where")
Dim result as Integer = method.Invoke(obj, New [Object]() { 1 })
AppDomain.Unload(domain)

此行失败:


Dim asy As Assembly = domain.Load(buffer)

使用此错误消息:


'Could not load file or assembly 'Place, Version=1.0.0.0, Culture=neutral, PublicKeyToken-null' or one of it's dependencies.  The System Cannot find the specified file.'

该文件在缓冲区中,所以我猜它是一个依赖.dll。但是,它应该在基本程序目录中找到那些。

关于错误原因的任何想法?

任何用于将程序集加载到 AppDomain、执行函数、然后卸载 AppDomain 的测试示例代码将不胜感激。

(顺便说一句,我用谷歌搜索并没有找到任何有用的样本。)

4

2 回答 2

1

您说错误是由于缺少参考是正确的。由于您加载程序集的方式,很可能无法解析引用。由于您是从字节数组加载,因此 Assembly.Location 不会指向 dll 的位置。由于您引用的 dll 不在 GAC 中,因此它将无法找到引用的程序集。尝试直接从文件加载程序集,而不是先加载到字节数组中。

于 2012-08-14T21:54:38.663 回答
0

如果您想知道无法加载哪些依赖项,请尝试使用 fuslogvw。检查http://msdn.microsoft.com/en-us/library/e74a18c4(VS.71).aspx

我发现链接文本的解释非常好。它说明了一些缺陷并提供了应该很容易转换为 VB.NET 的示例代码。

我希望这有帮助。

于 2009-02-05T19:46:43.863 回答