Как обеспечить запасную сборку вместо той, которая не может быть загружена? - PullRequest
7 голосов
/ 02 октября 2009

Во время выполнения, если указанная сборка не загружается, например, с помощью. «Сбой проверки строгого имени» (потому что он подписан тестом), есть ли способ предоставить сборку подстановки из другого пути с реальной подписью?

Я попытался подписаться на AppDomain.CurrentDomain.AssemblyResolve, но он не запускается, поскольку технически существует «плохая» сборка, ее просто нельзя загрузить.

Существует ли общий способ предоставления резервной сборки, когда сборка не может быть загружена?

Ответы [ 4 ]

1 голос
/ 02 октября 2009

Я думаю, что вы можете просто вызвать Assembly.LoadFrom, чтобы загрузить выбранную сборку практически без проверок безопасности. Мы часто используем это в начале нашего приложения, чтобы мы могли лучше справляться с изменением версии других сборок.

Также посмотрите на Метод Assembly.LoadFrom (String, Evidence, Byte [], AssemblyHashAlgorithm) похоже, что вы можете управлять передачей в хэше, а также в алгоритме хеширования.

1 голос
/ 02 октября 2009

Что вызывает попытку загрузки? IOW вы вызываете Assembly.Load или это результат попытки разрешения типа? Если это последнее, вы можете попробовать поиграть с событием AppDomain TypeResolve, если первое - вы можете добавить дополнительную логику к вашему вызову в Assembly.Load.

Если вы загружаете сборку вручную, хотя убедитесь, что загружаете ее с Assembly.Load, а не Assembly.LoadFrom. Существуют тонкие различия в разрешении типов в зависимости от того, какая сборка контекста загружена в

0 голосов
/ 19 октября 2009

Существует стандартный способ найти сборку, если приложение не может это сделать:

// register on assembly resolve exception
AppDomain.CurrentDomain.AssemblyResolve += ResolveEventHandler;

// try to load the assembly yourself
private static Assembly ResolveEventHandler(object sender, ResolveEventArgs args)
{
    return Assembly.Load(some_location);
}
0 голосов
/ 03 октября 2009

Похоже, то, что я хочу, невозможно. Я решил пойти другим путем. При компиляции нам придется изменить систему сборки так, чтобы она содержала условную ссылку на подписанные двоичные файлы вместо тестовых подписанных двоичных файлов.

Спасибо всем за предложения, хотя!

...