я нашел следующий код, который загружает 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);
}
}
В некоторых случаях это решение работает, но с DLL ZipDotNet я получаю:
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? Как бы я их разрешил?
Вы смотрели здесь: http://blogs.msdn.com/b/brada/archive/2009/12/11/visual-studio-project-sample-loading-error-assembly-could-not -be загруженного-и-будет-быть-проигнорирован-мог-не-нагрузка-файл или сборки-или-один в своем зависимости-операции-это-не поддерживаемое-исключения из-HRESULT-0x80131515 .aspx? – Dennis
Попробуйте сравнить его с исходным образцом: http://support.microsoft.com/kb/837908 – Vedran
Не могу поверить в это, но Деннис прав ... по какой-то причине Ionic.Zip.dll был заблокирован и разблокировка исправила проблему ... спасибо за этот хороший намек :) – lorus