C#: Как включить зависимые библиотеки DLL?
Я использую сторонний API, который определен в 2 DLL. Я включил эти библиотеки в мой проект и установил ссылки на них. Все идет нормально.
Однако эти библиотеки DLL имеют по крайней мере одну зависимую библиотеку DLL, которая не может быть найдена во время выполнения. Я скопировал недостающую DLL в проект и установил флаг "Копировать в вывод", но безуспешно.
Что я должен сделать здесь, чтобы сказать проекту, где он должен найти зависимую DLL?
Пояснение Я попытался добавить ссылку на отсутствующую DLL, но она не была распознана как компонент.Net. В отчаянии я добавил его прямо в папку вывода, но безуспешно.
Наконец, я установил API на ПК, и все заработало. При установке устанавливается переменная PATH, а DLL находится в папке установки. Но как сказать проекту посмотреть в одной из его внутренних папок?
3 ответа
Похоже, вам нужно лучше понять стороннюю библиотеку и то, как она использует свои собственные зависимости. Если установка API решает проблему, а копирование файлов вручную - нет, значит, вы что-то упустили. Там либо отсутствует файл, либо требуется переменная окружения или запись в реестре. В этом вам могут помочь две вещи - это инструмент зависящих (который является частью установки C++) и procmon, который расскажет вам все ключи реестра и файлы, которые используются во время выполнения.
Если вам повезет, это просто файл, который вам не хватает. Если это все, что вы можете, вы можете использовать раздел "Build Events" проекта, чтобы скопировать необходимые файлы в нужное место при успешной сборке. Если нет, вам придется решить эту проблему другим путем - либо путем установки API, либо путем развертывания собственного проекта установки.
Как вы разворачиваете? Просто плоские файлы? Если это так, он должен работать, пока файл попадает в выходной каталог проекта. Является ли?
Если вы используете другое развертывание, вам нужно будет указать этому движку, чтобы оно было включено. Это отличается для каждого из MSI /ClickOnce/ и т. Д.
Вы можете либо медленно добавлять нижестоящие зависимости в качестве ссылок на ваш проект. Это громоздко и несколько хрупко
Или вы можете использовать такой инструмент, как "Depends.exe" от Microsoft, чтобы проверить сборки верхнего уровня и получить список ссылок на зависимости.