Не удалось загрузить файл или сборку, но они загружены

У меня есть проект, в котором используется DLL из системы ERP. DLL используется для получения информации из ERP, например счетов-фактур и т. Д. Я получаю следующую ошибку:

Внутреннее исключение 1: FileNotFoundException: не удалось загрузить файл или сборку SnelStartGatewayInterface, Version = 12.48.37.0, Culture = нейтральный, PublicKeyToken = null или одну из его зависимостей. Система не может найти указанный файл.

Но в том же окне я использовал watch 1, чтобы увидеть текущую сборку с помощью метода:

AppDomain.CurrentDomain.GetAssemblies()

Возвращает пару сборок. Это тот, который загружен и точно такой же, как и в ошибке:

+ [36] {SnelStartGatewayInterface, Version = 12.48.37.0, Culture = нейтральный, PublicKeyToken = null} System.Reflection.Assembly {System.Reflection.RuntimeAssembly}

Почему он вернул мне ошибку?

Пс. Я пробовал тот же метод и dll в тестовом приложении Windows Forms, и он работал нормально.


person Naaman    schedule 21.02.2018    source источник
comment
взгляните на ... или одну из его зависимостей. Система не может найти указанный файл. это может быть ошибка загрузки зависимости.   -  person Paweł Łukasik    schedule 21.02.2018
comment
Я новичок в программировании и не работал с Dll. Не могли бы вы помочь мне и сказать, где я могу найти зависимости, или помочь мне увидеть загруженные зависимости.   -  person Naaman    schedule 21.02.2018
comment
@Naaman посмотри на мой ответ. Есть пример кода для получения всех сборок, на которые есть ссылки.   -  person Sean Stayns    schedule 21.02.2018
comment
Это похоже на проблему XY. Чего вы на самом деле пытаетесь достичь? Обычно для управляемых сборок вы устанавливаете ссылку перед их компиляцией, вы не загружаете их с помощью Reflection. Это какая-то проблема с развертыванием? Библиотека DLL системы ERP написана даже на .NET?   -  person NightOwl888    schedule 21.02.2018


Ответы (1)


Как и Павел Лукасик, упомянутый в комментариях, вам следует посмотреть на зависимости.

Для этого используйте:

private List<string> ListReferencedAssemblies()
{
    List<string> refList = new List<string>();
    var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
    foreach (var assembly in assemblies)
    {
        refList.Add(assembly.Name);
    }

    return refList;
} 

чтобы увидеть все сборки, на которые есть ссылки.

Или с LINQ:

private List<string> ListReferencedAssemblies()
{
    return Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(x => x.FullName).ToList();
} 
person Sean Stayns    schedule 21.02.2018
comment
Я пробовал код, который вы предоставили, но проблема в том, что текущая исполняемая сборка не указана в ошибке. - person Naaman; 21.02.2018