.NET AssemblyResolve - динамически загружаемая новая версия.dll
У меня есть много приложений.NET WinForm, которые используют конкретную сборку.dll. Компания, выпускающая этот конкретный продукт, периодически выпускает новую версию. Поскольку они предлагают сборки со строгими именами, мне нужно скачать новую версию их.dll, но также пройти через все мои приложения и перестроить их со ссылкой на новый файл.dll. Затем мне нужно развернуть каждое из моих приложений. На это уходит много времени, бумажной работы и тестирования, поэтому я попросил создателя этого DLL-файла обойти это решение.
Они дали мне эту ветку Stack Overflow в качестве предложения и сказали, что она будет "отлично работать". Тем не менее, я не совсем понял это.
В своем приложении я добавил это в Program.cs:
static Program()
{
AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs e)
{
AssemblyName requestedName = new AssemblyName(e.Name);
if (requestedName.Name.ToUpper().StartsWith("THE.PRODUCT.NAME"))
{
AssemblyName assemblyName = AssemblyName.GetAssemblyName(@"C:\The.Product.Name.15.5.0.0.dll");
return Assembly.LoadFile(@"C:\The.Product.Name.15.5.0.0.dll");
}
else
{
return null;
}
};
}
Чтобы заставить это работать, я должен удалить / переименовать файл.dll обычного продукта в его расположении по умолчанию, и я поместил новую версию просто в корневой каталог C:\ (как показывает код). Причиной удаления.dll из ее обычного расположения является то, что обработчик AssemblyResolve запускается, потому что указанная сборка не может быть найдена.
В любом случае, с помощью приведенного выше кода мое приложение выдает следующее исключение: "Была предпринята попытка загрузить сборку из сетевого расположения, что вызвало бы" песочницу "сборки в предыдущих версиях.NET Framework. Этот выпуск.NET Framework не включает политику CAS по умолчанию, ..."И так далее.
Что именно я здесь делаю не так? Кто-нибудь вообще понимает, чего я пытаюсь достичь? Я не могу поверить, что это не было сделано раньше, но сейчас я немного растерялся.
Любая помощь будет принята с благодарностью. Спасибо.