Assembly.ReflectionOnlyLoadFrom не работает - PullRequest
9 голосов
/ 23 февраля 2010

У меня есть сборка Library1.dll, которая содержит некоторые интерфейсы, которые были сериализованы как байтовый массив в базу данных. По некоторым причинам мы должны изменить свойства и определение интерфейса. так что теперь я пишу утилиту миграции. Итак, у меня есть 2 версии Library1.dll. В моей утилите я создал папку, в которой храню новую версию Library1.dll. Эта утилита в свою очередь также ссылается на Library1.dll, следовательно, в папке bin содержится Library1.dll, но эта dll скомпилирована в более старой версии. Моя новая версия Library1.dll хранится в закрытом пути, который я передаю функции Assembly.ReflectionOnlyLoadFrom для создания экземпляра и, следовательно, GetTypes в загруженной сборке, что в дальнейшем позволило бы мне выполнить преобразование данных.

Но я всегда получаю ReflectionTypeLoadException при попытке загрузить Library1.dll с частного пути.

Пожалуйста, помогите, ребята !!! любая помощь будет оценена. Я действительно застрял.

Спасибо, AG

1 Ответ

19 голосов
/ 24 февраля 2010

Если ваша библиотека ссылается на другую dll, GetTypes завершится ошибкой, когда достигнет типа, который использует внешний тип. В отличие от обычной загрузки сборки, загрузка ReflectionOnly Assembly не разрешает зависимости. Вы можете либо подписаться на AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve и загружать зависимости по мере необходимости, либо вы можете предварительно загрузить их.

Это код, который я использую для этого:

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
foreach (var assemblyName in assembly.GetReferencedAssemblies()) {
  try {
    Assembly.ReflectionOnlyLoad(assemblyName.FullName);
  } catch {
    Assembly.ReflectionOnlyLoadFrom(Path.Combine(Path.GetDirectoryName(assemblyPath), assemblyName.Name + ".dll"));
  }
}

Это попытается загрузить все зависимости загруженной сборки только для отражения сначала по полному имени, а затем по пути (при условии, что зависимость находится в том же каталоге, что и загруженная сборка).

...