C #: Как включить зависимые библиотеки DLL? - PullRequest
11 голосов
/ 27 октября 2008

Я использую сторонний API, который определен в 2 DLL. Я включил эти библиотеки в мой проект и установил ссылки на них. Все идет нормально.

Однако эти библиотеки DLL имеют по крайней мере одну зависимую библиотеку DLL, которую невозможно найти во время выполнения. Я скопировал недостающую DLL в проект и установил флаг «Копировать в вывод», но безуспешно.

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

Разъяснение Я попытался добавить ссылку на отсутствующую DLL, но она не была распознана как компонент .Net. В отчаянии я добавил его прямо в папку вывода, но безуспешно.

Наконец, я установил API на ПК, и все заработало. При установке устанавливается переменная PATH, а DLL находится в папке установки. Но как заставить проект искать в одной из его внутренних папок?

Ответы [ 3 ]

2 голосов
/ 27 октября 2008

Похоже, вам нужно лучше понять стороннюю библиотеку и то, как она использует свои собственные зависимости. Если установка API решает проблему, а копирование файлов вручную - нет, значит, вы что-то упустили. Там либо отсутствует файл, либо требуется переменная окружения или запись в реестре. В этом вам могут помочь две вещи - это инструмент зависимости (который является частью установки C ++) и procmon, который сообщит вам все ключи реестра и файлы, которые используются во время выполнения.

Если вам повезет, это просто файл, который вам не хватает. Если это все, что вы можете, вы можете использовать раздел «События сборки» проекта, чтобы скопировать необходимые файлы в нужное место при успешной сборке. Если нет, вам придется решить эту проблему другим путем - либо путем установки API, либо путем развертывания собственного проекта установки.

0 голосов
/ 27 октября 2008

Вы можете либо медленно добавлять нисходящие зависимости в качестве ссылок на ваш проект. Это громоздко и несколько хрупко

Или вы можете использовать такой инструмент, как «Depends.exe» от Microsoft, чтобы проверить сборки верхнего уровня и получить список ссылок на зависимости.

0 голосов
/ 27 октября 2008

Как вы развертываете? Просто плоские файлы? Если это так, он должен работать, пока файл попадает в выходной каталог проекта. Есть ли это?

Если вы используете другое развертывание, вам необходимо указать этому движку, чтобы оно было включено. Это отличается для каждого из MSI / ClickOnce / и т. Д.

...