【发布时间】:2013-03-07 20:12:28
【问题描述】:
我发现以下代码可以从自定义位置动态加载 dll:
private void Form1_Load(object sender, EventArgs e)
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
}
private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
{
string folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string assemblyPath = Path.Combine(folderPath, "libs", new AssemblyName(args.Name).Name + ".dll");
if (File.Exists(assemblyPath) == false) return null;
Assembly assembly = Assembly.LoadFrom(assemblyPath);
return assembly;
}
private void button1_Click(object sender, EventArgs e)
{
var zip = ZipFile.Read("test.zip");
foreach (ZipEntry file in zip)
{
file.Extract(".", ExtractExistingFileAction.OverwriteSilently);
}
}
在某些情况下,此解决方案有效,但我得到的是 ZipDotNet dll:
InnerException {"File or assembly name \"Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c\" or one of its dependencies, was not found. Operation is not supported. (Exception from HRESULT: 0x80131515)":"Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c"} System.Exception {System.IO.FileLoadException}
自从它通过if (File.Exists(assemblyPath) == false) return null; 我猜它是加载Ionic.Zip.dll 的依赖项的问题?我也将如何解决它们?
【问题讨论】:
-
尝试将其与来自support.microsoft.com/kb/837908的原始样本进行比较
-
不敢相信,但丹尼斯是对的......由于某种原因,Ionic.Zip.dll 被锁定并解锁它解决了问题......谢谢你的好提示 :)
标签: c# .net .net-assembly assembly-resolution resolve