在appdomain中执行一个函数

时间:2009-02-05 17:45:23

标签: vb.net dll appdomain

给定一个.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,Execting a function,然后卸载AppDomain,我们将不胜感激。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

我发现link text的解释非常好。它说明了一些陷阱,并提供了应该很容易翻译成VB.NET的示例代码。

我希望这会有所帮助。