【发布时间】:2010-11-16 09:05:16
【问题描述】:
创建一个新的 appdomain,设置 assemblyResolve 处理程序并 你总是得到一个异常说'未找到程序集[当前正在执行的程序集]'
什么给了?代码如下
string _fileName = @"c:\temp\abc123.dll";
AppDomain sandBox = AppDomain.CreateDomain("sandbox");
sandBox.AssemblyResolve += new ResolveEventHandler(sandBox_AssemblyResolve);
// the line generates the exception !
System.Reflection.Assembly asm = sandBox.Load(System.Reflection.AssemblyName
.GetAssemblyName(fileName).FullName);
foreach (System.Reflection.AssemblyName ar in asm.GetReferencedAssemblies())
dbgWrite("Ref: " + ar.FullName );
System.Reflection.Assembly sandBox_AssemblyResolve
(object sender, ResolveEventArgs e)
{
System.Reflection.Assembly asm =
System.Reflection.Assembly.LoadFrom(_fileName);
return asm;
}
例外是:
System.IO.FileNotFoundException:无法加载文件或程序集“appAdmin,版本=1.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。文件名:'appAdmin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' [snip]
【问题讨论】:
-
这不是一个连贯的问题。一开始您不会显示 sandBox_AssemblyResolve 的内容。现在你认为实际结果应该是什么,也不是完整的 statcktrace
-
现在清楚了吗?错误是设置事件处理程序=> Assembly.AssemblyResolve += new ....其余的甚至没有机会执行!这就是为什么我没有早点复制它!