С#: Как включить зависимые DLL?

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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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