Примечание: этот пост является продолжением моей проблемы вчера . Вчера я ошибочно пытался развернуть в режиме отладки. Изменение, которое исправило ряд проблем, но создало сегодняшнюю проблему:
Я сейчас развертываю (на основе это руководство ) режим выпуска в многопоточном режиме DLL, так как некоторые из моих внешние зависимости требуют DLL. Новая проблема заключается в том, что мой установщик больше не упаковывает и не развертывает требуемые библиотеки DLL (по крайней мере вчера «обнаруженные зависимости» упаковывались / появлялись в папке программы каждый раз). Сегодня программа пропускает вчерашнюю ошибку, но сообщает мне, что (не отладочные) библиотеки DLL отсутствуют. Копирование вручную тех, которые были запрошены, решило проблему и отлично запустило программу.
Поэтому я обратил свое внимание на попытку автоматического развертывания библиотек DLL. Иногда, но, как ни странно, в большинстве случаев эти требуемые библиотеки DLL отображаются в списке «обнаруженных зависимостей». Независимо от того, появляются они или нет, они никогда не упаковываются и не отображаются в моей папке установки. Если они появились, список исчезает после сборки, как показано на следующих двух снимках экрана:
Единственное исправление, которое я нашел до сих пор , - это ручное добавление этих зависимостей в основную папку приложения вывода:
Я доволен этим решением в оперативном плане, так как сейчас оно прекрасно работает, но я чувствую, что это все еще обходной путь. Я считаю, что это решение работает только до тех пор, пока я вручную учел все зависимости, что основано на том, как я решил включить этот список вручную. До того, как какие-либо зависимости были упакованы, запуск программы сообщал мне заранее, что два отсутствовали. Как только я добавил их, программа успешно запустилась, но на полпути вызвала ошибку, когда отсутствовала «зависимость второго уровня». А именно, k4a.dll
, который я скопировал вручную, похоже, требует depthengine_2_0.dll
при каком-то конкретном c вызове функции. Если бы я не сталкивался с этим вызовом функции в моем консольном приложении (например, взял другое меню), я бы проигнорировал эту зависимость.
Так что здесь необходимо одно из следующих действий:
- Способ автоматического определения и включения зависимостей. Кажется, что Windows Установщик через VS должен быть способен на это, но что-то изменилось между вчера и сегодня. Или;
- Комплексный способ определения всех зависимостей, которые понадобятся на любом возможном этапе программы, чтобы я мог вручную включить их. Зависимость Уокер, например, не выявил необходимость в
depthengine_2_0.dll
, как показано ниже:
Обновление : После перенастройки моего проекта все немного изменилось. Теперь тот же список обнаруженных зависимостей из рис. 1 все еще только иногда обнаруживается. Но когда это так, оно на самом деле упаковано и включено. Обратите внимание, что в автоматически обнаруживаемом списке отсутствуют две зависимости, которые я включил вручную после того, как обнаружил, что они необходимы. Таким образом, список генерируется только иногда, не включает в себя все необходимые зависимости и может включать в себя ненужные.