2015-06-05 3 views
3

В качестве продолжения моего предыдущего question.`Assembly.Load` в отдельной папке

Я загружаю DLL через этот код. Пример 1:

var assembly = Assembly.LoadFile("C:\\Temp\\PROCESSOR\\SKM.dll"); 

И это отлично работает.

Но я использую сериализации, что внутренне использовать этот код, пример 2:

var ass1 = Assembly.Load("SKM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); 

И этот код выдает исключение: System.Runtime.Serialization.SerializationException: Unable to find assembly "SKM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null". - это потому, что DLL в отдельной папке.

Как заставить CLR увидеть DLL в отдельном каталоге (не в подпапках основного приложения)?

Я попытался это:

  1. <codeBase version="1.0.0.0" href="C:\\Temp\\PROCESSOR\\SKM.dll"/> - не работают, потому что это работает только для вложенных папок.
  2. <probing privatePath="paths"/> - не работает, потому что он работает только для подпапок.
  3. Сначала запустите первый пример, а затем запустите второй пример. Но даже если уже загружен SKM.dll, CLR не видит мою сборку.
+1

Боковое примечание, но вы получаете FullPath() полного пути. –

+0

@HenkHolterman спасибо, я исправил его)) –

+1

Возможно, ловить AppDomain.AssemblyResolve и вызов Assembly.LoadFrom с fullPath оттуда есть опция. – Ralf

ответ

3

Я нашел разрешение here.

Просто добавить событие в AssemblyResolve:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => 
{ 
    string fileName = new AssemblyName(args.Name).Name + ".dll"; 
    string assemblyPath = Path.Combine("C:\\Temp\\PROCESSOR", fileName); 
    var assembly = Assembly.LoadFile(assemblyPath); 
    return assembly; 
}; 

И если DLL не может быть найден стандартным способом, событие уволили и загрузки DLL из моей папки.

0

Есть ли какая-то особая причина, по которой вы не хотите идти с примером 1, если знаете, где находится DLL?

Если вы действительно этого не сделали, то одним из вариантов было бы зарегистрировать DLL в GAC.

https://msdn.microsoft.com/en-us/library/dkkx7f79%28v=vs.110%29.aspx

Смежные вопросы