2014-02-13 3 views
11

Я создаю dll, ссылаясь на вторую dll. Я добавил вторую dll в качестве ссылки в проекте первой dll, перейдя на Properties > Common Properties > Framework and References > Add New Reference > BrowseНе удалось загрузить файл или сборку. Система не может найти указанный файл.

Я скомпилировал вторую dll из исходного кода третьей стороны. Оба проекта - это C++/CLI. Всякий раз, когда мое основное приложение пытается вызвать функцию в первой DLL, которая содержит вызов второй DLL, я получаю следующее сообщение об ошибке:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module.

Additional information: Could not load file or assembly 'NBIS, Version=1.0.5156.29834, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

У меня есть копия второго DLL в том же каталоге, что и мой main exe, и я даже попытался сохранить копию рядом с первой dll, но безрезультатно.

Вторые ссылки DLL несколько статических библиотек, но только ссылки на сборки содержащиеся в нем

System

System.Data

System.Drawing

System.XML

Все, которые я добавил в качестве ссылок сборки в первой DLL.

Что я могу сделать, чтобы найти приложение и загрузить вторую dll?

+1

«или одна из его зависимостей» –

+0

@HansPassant Поскольку единственные упомянутые динамические библиотеки - это те, которые я перечислил, не означают, что это это не из-за зависимости? – duggulous

+0

Предполагается, что вы знаете, какие зависимости для nbis.dll. Вы не знаете. Продавец или автор знает. –

ответ

18

Как указано в комментариях, SysInternals 'Process Monitor является ценным инструментом для диагностики проблем с разрешением DLL. Сообщает вам, когда у третьей стороны DLL есть зависимость, о которой вы не знаете, также говорит вам, когда Windows ищет неправильный угол вашего жесткого диска для файла или находит неправильный.

Loader snaps - это встроенный диагностический инструмент для Windows. Но Process Monitor намного удобнее.

Он генерирует довольно много информации, начиная со дна трассировки или включающей трассировку только в нужное время. Вам часто нужно использовать свои инструменты фильтрации, чтобы превратить пожар в соответствующую струйку. Стоит час вашего времени, чтобы понять это, этот инструмент принадлежит черному поясу любого программиста.

4

Щелкните правой кнопкой мыши проект, который вы создали dll и новый проект ссылок, затем выберите свойства. В разделе «Приложение» проверьте целевую структуру и убедитесь, что обе они имеют одну и ту же структуру, некоторые проекты DLL имеют тенденцию выбирать версию фреймворка клиента по умолчанию, которые, как правило, дают ошибку, которую вы сейчас имеете.

Дайте мне знать, если это не проблема.

+1

Оба проекта нацелены на .NET v4.5, как вы можете видеть на этих изображениях: [dll1] (http://ubuntuone.com/17dVhPyuIGaTtSBJla0xel) [dll2] (http://ubuntuone.com/0YHXtKOvXuKnzwy8w4fbez) – duggulous

2

My PowerShell ISE не работал как администратор. Казалось, это проблема для меня.

0

Измените настройку пула приложений.
Держите шаги:

  1. менеджер IIS открытых
  2. Нажмите кнопку «пулы приложений» (список пулов приложений)
  3. Выберите пул приложений
  4. правой кнопки мыши свой пула приложений и выберите «Расширенные настройки»
  5. Измените «Включить 32-разрядное приложение» с false на true.(Когда вы создаете пул приложений. Включить 32-разрядное приложение присваивает по умолчанию значение false)
Смежные вопросы

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