Ответ 1
Большинство моих важных сборок не загружаются в качестве ссылки в моем проекте. То, что я делаю, это объявить интерфейсы взаимодействия (общие для всех проектов в качестве базы... да, это ссылка ссылается..), тогда я загружаю все сборки во время выполнения, используя:
Assembly assembly = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
Type type = assembly.GetType("MyClass");
object instanceOfMyType = Activator.CreateInstance(type);
Я использую это по нескольким причинам. У меня разные реализации классов, которые я должен вызывать в зависимости от конфигурации пользователя/клиента. Также представляется хорошим вариантом гарантировать, что вы загружаете определенную сборку с помощью моего общедоступного токена и версии.
После небольшого исследования я нашел эти сообщения:
- Как предотвратить подмену DLL в .NET
- http://ianpicknell.blogspot.com.br/2010/02/evading-strong-name-integrity-check.html
Что ж, я был шокирован после того, как посмотрел на ваш вопрос. Это вызывает беспокойство насчет ссылки на мои DLL сейчас. Я не знаю, насколько это безопасно, но, похоже, это намного безопаснее, чем просто ссылаться на него.
Я не нашел ссылки в документации MS для использования Assembly.Load
и bypassTrustedAppStrongNames
. Я буду запускать некоторые тесты позже, но кажется более безопасным использовать это.