Загрузить сборку со строгим именем по определенному пути?
У меня есть сборка со строгим именем, установленная в определенную папку (а не в GAC).
Имя, как показано в Reflector:
"Foo.Bar.TreeFrog, Version=1.2.1.0, Culture=neutral, PublicKeyToken=ac88c4a8b22089b4"
и путь, где он установлен
"c:\\QueueBall"
Могу ли я использовать Assembly.Load
или же Assembly.LoadFrom
загрузить его, и если да, то как?
Могу ли я гарантировать, что строгое именование будет выполнено, то есть, что загружаемая DLL действительно та, которую я ожидаю, а не самозванец с тем же именем?
1 ответ
Решение
Вы можете использовать LoadFrom:
var assembly = Assembly.LoadFrom(@"c:\QueueBall\Foo.Bar.TreeFrog.dll");
Обратите внимание, что это также приведет к загрузке ссылочных сборок в домен приложения, в котором выполняется этот код. Если вы не хотите такого поведения, вы можете использовать метод LoadFile.
ОБНОВИТЬ:
Вы можете проверить идентичность сборки перед загрузкой, чтобы убедиться, что она не была подделана:
AssemblyName an = AssemblyName.GetAssemblyName(@"c:\QueueBall\Foo.Bar.TreeFrog.dll");
byte[] key = an.GetPublicKey();
Version version = an.Version;