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

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

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

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

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

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

3 ответов


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

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


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

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


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

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