Скомпилировал и собрал в Visual Studio в выходную папку Release решение из нескольких проектов. Указал зависимости проектов. В решении три проекта: библиотека dll, исполняемый файл с++ и с# приложение Windows. У меня приложение работает, все в норме. Скопировал папку Release на другой компьютер, программа запускается и работает нормально, пока не нажата кнопка обработчик которой связан с библиотекой dll, и выдается ошибка: <<Платформа Microsoft.Net Framework
Необрабатываемое исключение в компоненте приложения. При нажатии кнопки «Продолжить» приложение проигнорирует ошибку и попытается продолжить работу.
Не удалось загрузить файл или сборку «*.dll» либо одну из их зависимостей. Не найден указанный модуль.>>
Программа зависает намертво. Видимо не находит библиотеку dll. Эта библиотека собирается и лежит в той же папке Release, что и исполняемый exe.
В чем может быть причина? Прописывается, как то путь к dll в visual studio? Или его зависимости еще какие-то?
fix error visual studio the system cannot find the file specified | visual studio
- Вопрос задан 18 сент. 2022
- 479 просмотров
Решения вопроса 0
Ответы на вопрос 1
Токсичный шарпист
Нужно просто вызвать Publish, а не Build — тогда студия все зависимости скопирует
Источник: qna.habr.com
Устранение неполадок в изолированных приложениях и параллельных сборках C/C++
Загрузка приложения C/C++ может завершиться неудачно, если не удается найти зависимые библиотеки. В этой статье описаны наиболее распространенные причины ошибок загрузки приложения C/C++, а также способы по их устранению.
Если приложению не удается загрузиться, так как в его манифесте указана зависимость от параллельной сборки, которая не установлена как закрытая сборка в той же папке, что и исполняемый файл, и в собственном кэше сборок в папке %WINDIR%WinSxS может отображаться одно из следующих сообщений об ошибке в зависимости от версии Windows, в которой вы пытаетесь запустить приложение.
- Ошибка при инициализации приложения (0xc0000135).
- Это приложение не удалось запустить из-за неправильной конфигурации. Повторная установка приложения может решить данную проблему.
- Система не может выполнить указанную программу.
Если в приложении отсутствует манифест и оно зависит от библиотеки DLL, которую Windows не удалось найти в типичных расположениях, может отображаться сообщение об ошибке, подобное следующему:
- Не удалось запустить это приложение, так как не была найдена необходимая библиотека DLL. Повторная установка приложения может решить данную проблему.
Если приложение развертывается на компьютере, на котором не установлена среда Visual Studio, и аварийно завершает работу с сообщениями об ошибках, которые похожи на предыдущие, проверьте следующее.
Как создать exe файл в Visual Studio
- Выполните действия, описанные в разделе Основные сведения о зависимостях приложения Visual C++. Обходчик зависимостей может показать большинство зависимостей для приложения или DLL. Если вы заметили, что некоторые из библиотек DLL отсутствуют, установите их на компьютере, на котором вы пытаетесь запустить приложение.
- Загрузчик операционной системы использует манифест приложения для загрузки сборок, от которых зависит приложение. Манифест может быть внедрен в двоичный файл в качестве ресурса либо установлен как отдельный файл в папке приложения. Чтобы проверить, внедрен ли манифест в двоичный файл, откройте двоичный файл в Visual Studio и попробуйте найти RT_MANIFEST в списке ресурсов. Если вы не можете найти внедренный манифест, найдите в папке приложения файл с именем .< extension.manifest>.
- Если приложение зависит от параллельных сборок и манифест отсутствует, необходимо убедиться, что компоновщик создает манифест для вашего проекта. Проверьте параметр компоновщика Создать манифест в диалоговом окне Свойства проекта.
- Если манифест внедрен в двоичный файл, проверьте правильность идентификатора RT_MANIFEST для этого типа двоичного файла. Дополнительные сведения о том, какой идентификатор ресурса следует использовать, см. в разделе Использование параллельных сборок в качестве ресурса (Windows). Если манифест находится в отдельном файле, откройте его в редакторе XML или текстовом редакторе. Дополнительные сведения о манифестах и правилах для развертывания см. в разделе Манифесты.
Примечание Если присутствуют одновременно внедренный манифест и отдельный файл манифеста, загрузчик операционной системы использует внедренный манифест и игнорирует отдельный файл. Однако в Windows XP верно обратное — используется отдельный файл манифеста, а внедренный манифест игнорируется.
Пример
Предположим, у нас есть приложение appl.exe, созданное с помощью Visual C++. Манифест приложения внедряется в appl.exe как двоичный ресурс RT_MANIFEST с идентификатором 1 или хранится в виде отдельного файла appl.exe.manifest. Содержимое этого манифеста выглядит следующим образом:
Этот манифест сообщает загрузчику операционной системы, что appl.exe зависит от сборки с именем Fabrikam.SxS.Library, версия 2.0.20121.0, которая разработана для 32-разрядной архитектуры x86. Зависимую параллельную сборку можно установить как общую или закрытую сборку.
Манифест для общей сборки устанавливается в папку %WINDIR%WinSxSManifests. Он определяет сборку и перечисляет ее содержимое, т. е. библиотеки DLL, входящие в сборку:
Параллельные сборки могут использовать файлы конфигурации издателя, также называемые файлами политики, чтобы глобально перенаправлять приложения и сборки на использование одной версии параллельной сборки вместо другой версии той же сборки. Политики для общей сборки можно просмотреть в папке %WINDIR%WinSxSPolicies. Ниже приведен пример файла политики.
Этот файл политики указывает, что любые приложения или сборки, запрашивающие версию 2.0.10000.0 этой сборки, должны использовать версию 2.0.20121.0, т. е. текущую версию, установленную в системе. Если версия сборки, которая упоминается в манифесте приложения, указана в файле политики, загрузчик ищет версию этой сборки, заданную в манифесте, в папке %WINDIR%WinSxS. Если эта версия не установлена, загрузка завершится ошибкой. Если же версия сборки 2.0.20121.0 не установлена, загрузка завершится ошибкой для приложений, которые запрашивают версию сборки 2.0.10000.0.
Однако сборку также можно установить как закрытую параллельную сборку в папке установленного приложения. Если операционная система не может найти сборку как общую, выполняет поиск закрытой сборки в следующем порядке:
- Проверьте папку приложения на наличие файла манифеста с именем . В этом примере загрузчик пытается найти Fabrikam.SxS.Library.manifest в папке, содержащую appl.exe. Если манифест найден, загрузчик загружает сборку из папки приложения. Если сборка не найдена, загрузка завершится ошибкой.
- Попробуйте открыть папку \ в папке, содержащей appl.exe, и если \ существует, попробуйте загрузить файл манифеста с именем из этой папки. Если манифест найден, загрузчик загружает сборку из папки \. Если сборка не найдена, загрузка завершится ошибкой.
Дополнительные сведения о порядке поиска зависимых сборок загрузчиком см. в разделе Порядок поиска сборок. Если загрузчику не удается найти зависимую сборку как закрытую, загрузка завершится ошибкой и появится сообщение «Система не может выполнить указанную программу». Чтобы устранить эту ошибку, убедитесь, что зависимые сборки (и библиотеки DLL, которые являются их частью) установлены на компьютере как закрытые или общие сборки.
Источник: learn.microsoft.com
Как настроить Visual Studio для отладки DLL ( Невозможно запустить программу ошибка )
По сути, у меня есть проект Visual Studio, который создает DLL (аудио-плагин VST). Где этот тип сценария проекта был установлен для меня в прошлом, я мог бы создать, запустить и отладить плагин. Visual Studio автоматически запускает любую программу, которую я использовал для размещения плагина. Я пытаюсь добиться того же эффекта в моем текущем проекте, но я не знаю, как это настроить.
В настоящее время, когда я собираю и запускаю мою DLL в Visual Studio, я получаю сообщение об ошибке «Невозможно запустить программу». Библиотека DLL все еще строится, и я все еще могу ее запустить, но я не могу отладить ее в Visual Studio, потому что я не знаю, что мне нужно сделать в настройках моего проекта, чтобы это произошло. Как я могу это сделать?
Что я знаю, так это то, что в проектах, где это успешно работает, есть некоторые изменения, сделанные в настройках проекта Visual Studio в полях, помеченных как «события до сборки» и «события после сборки», поэтому, вероятно, я хочу сделать это отредактируйте их таким образом, чтобы сообщить Visual Studio следующее: «Эй, прежде чем пытаться запускать и отлаживать эту DLL, вам нужно запустить другую программу (моя программа называется Max.exe), а затем вы должны ждать, пока эта программа загружает DLL. Тогда вы можете отлаживать! Не будьте глупым компьютером и попробуйте отладить его до того, как он загрузится в Max.exe … »
Что я не знаю: ВСЕ ЕЩЕ. Это буквально все, что я знаю о том, что я пытаюсь сделать, — о красочной попытке поговорить с компьютером на английском.
В настоящее время, когда я собираю и запускаю мою DLL в Visual Studio, я получаю сообщение об ошибке «Невозможно запустить программу». Это неудивительно, так как проект ничего не знает о среде, которую я хочу использовать для тестирования DLL, но проблема в том, что я не знаю, что нужно знать Visual Studio. Я действительно недостаточно разбираюсь в программировании, чтобы понять смысл того, что я пытаюсь сделать. Да, я упомянул эти поля, помеченные как pre-build и post-build, потому что я помню, что они важны, но я не знаю точно, что или как писать в этих полях, и я также не знаю, будет ли что-то еще Мне нужно сказать Visual Studio, прежде чем это будет работать.
Q.E.D Я на самом деле не уверен, что события до и после сборки, или как они работают. И я почти ничего не знаю о настройке параметров проекта VS. Все, что я знаю, это как написать код обработки звука. Я почувствовал необходимость в этом отказе от ответственности, потому что обычно мои вопросы встречаются с разгневанными программистами, которые думают, что я не занимаюсь собственным исследованием; они не понимают, что я звукорежиссер, который пропустил программирование 101. Да, как отладить dll, это общий вопрос, я уверен, но ответы на эти вопросы, как правило, предполагают наличие необходимых знаний, которых у меня нет.
Решение
Вы захотите отредактировать поле Command в свойствах отладки вашего проекта. Щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите Свойства (обычно это последний элемент). Откройте страницу «Отладка» в разделе «Свойства конфигурации». Поле Command указывает, какой исполняемый файл нужно запустить при отладке.
По умолчанию он содержит $ (TargetPath), который ссылается на окончательный двоичный файл, скомпилированный вашим проектом. Это бесполезно для DLL, так как DLL не являются исполняемыми. Измените это на путь любого стороннего приложения, для которого вы пишете плагин.
С этим изменением запуск с отладкой фактически запустит стороннее приложение и подключит к нему отладчик. Как только приложение загрузит ваш плагин, вы сможете нормально его отлаживать.
Другие решения
Для Visual Studio,
- В Solution Explorer щелкните правой кнопкой мыши на проекте и выберите Properties ,
- В Properties , выбирать Configuration Properties -> Debugging ,
- За Command введите полный путь к исполняемому файлу, который будет загружать вашу DLL. Заполните Command Arguments а также Working Directory соответственно.
Кроме того, вам нужно убедиться, что исполняемый файл действительно загружает созданную вами DLL. Ошибка, которую многие совершают, заключается в том, что они запускают свой исполняемый файл и не понимают, что исполняемый файл загружает другую версию DLL, которую они пытаются отладить. Это может произойти из-за того, что Windows ищет первую DLL-библиотеку, которую находит с помощью логики поиска DLL (exe-каталог, путь и т. Д.).
Источник: web-answers.ru