Visual studio поиск dll
How do I set a path for DLL files to be searched in Visual Studio for a particular project alone?
Now I am setting it in the environment path variable, but I would like better control over this.
Do you mean that you're attempting to run something in the debugger, and because the DLLs aren't in PATH, it's not finding them?
5 Answers 5
Search MSDN for "How to: Set Environment Variables for Projects". (It's Project>Properties>Configuration Properties>Debugging "Environment" and "Merge Environment" properties for those who are in a rush.)
The syntax is NAME=VALUE and macros can be used (for example, $(OutDir)).
For example, to prepend C:\Windows\Temp to the PATH:
Similarly, to append $(TargetDir)\DLLS to the PATH:
You have a couple of options:
- You can add the path to the DLLs to the Executable files settings under Tools > Options > Projects and Solutions > VC++ Directories (but only for building, for executing or debugging here)
- You can add them in your global PATH environment variable
- You can start Visual Studio using a batch file as I described here and manipulate the path in that one
- You can copy the DLLs into the executable file's directory :-)
With Visual Studio 2010, you can go in your project's property pages, and it's under "Configuration Properties -> VC++ Directories".
Bullet 1 is deprecated in VS Community 2015. "It is now available as a user property sheet that is added by default to all projects."
In VS 2019 you set this in Project properties -> Common properties -> VC++ Directories -> Executable Directories you can also add project property sheet and set it there and add the property sheet to all new projects.
Alternatively if it doesn't work then: Project properties -> Common properties -> Debugging -> Environment add this PATH=%PATH%; MY_DLL_DIR replacing the MY_DLL_DIR with directory to DLL directory, note the semicolon!
If you only need to add one path per configuration (debug/release), you could set the debug command working directory:
Project | Properties | Select Configuration | Configuration Properties | Debugging | Working directory
Repeat for each project configuration.
Set the PATH variable, like you're doing. If you're running the program from the IDE, you can modify environment variables by adjusting the Debugging options in the project properties.
If the DLLs are named such that you don't need different paths for the different configuration types, you can add the path to the system PATH variable or to Visual Studio's global one in Tools | Options.
None of the answers solved exactly my problem (the solution file I was running was trying to find xcopy to copy a dll after generation).
What solved it for me was going into menu "Project -> Properties"
Then in the window that opens choosing on the left pane: "Configuration Properties -> VC++ Directories
Если вы разработали приложение, использующее библиотеки DLL из Visual Studio, для его запуска на компьютерах пользователей также должны присутствовать эти библиотеки. Поскольку у большинства пользователей, скорее всего, отсутствует Visual Studio, необходимо передать им эти файлы. В Visual Studio эти библиотеки DLL доступны в составе распространяемых файлов, которые можно включить в состав установщика приложения.
Для облегчения включения этих распространяемых библиотек DLL в состав установщика они доступны в виде отдельных распространяемых пакетов. Это привязанные к определенной архитектуре исполняемые файлы, использующие центральное развертывание для установки распространяемых файлов на компьютер пользователя. Например, vcredist_x86.exe устанавливает 32-разрядные библиотеки для компьютеров x86 и x64, vcredist_x64.exe устанавливает 64-разрядные библиотеки для компьютеров x64, а vcredist_ARM.exe устанавливает библиотеки для компьютеров ARM. Рекомендуется использовать центральное развертывание, так как корпорация Майкрософт может использовать службу Центра обновления Windows для обновления этих библиотек независимо друг от друга. Кроме копии в установке Visual Studio, для загрузки доступны текущие распространяемые пакеты. Ссылки на новейшие поддерживаемые распространяемые пакеты для актуальных и более старых наборов инструментов см. в разделе Последние поддерживаемые скачиваемые файлы для Visual C++. некоторые более ранние версии распространяемых пакетов можно найти в центре загрузки майкрософт или в my.visualstudio.com для "пакетов Распространяемый компонент Visual C++".
Поддерживается только использование распространяемого пакета, который совпадает с версией набора инструментов или новее. Основной номер версии развертываемого вами распространяемого пакета должен соответствовать версии набора инструментов Visual Studio, используемого для создания приложения, а дополнительный номер версии должен быть аналогичным или выше. Visual Studio 2019, 2017 и 2015 имеют совместимые номера версий набора инструментов, то есть более новые Visual Studio распространяемые файлы могут использоваться приложениями, созданными набором инструментов из более старой версии. например, Visual Studio 2019 распространяемые файлы могут использоваться приложениями, созданными с помощью набора инструментов Visual Studio 2017 или 2015. Хотя они могут быть совместимы, мы не поддерживаем использование старых распространяемых файлов в приложениях, созданных с помощью более нового набора инструментов. Например, использование распространяемых файлов 2017 в приложениях, созданных с помощью набора инструментов 2019, не поддерживается.
Другой способ включения распространяемых библиотек DLL в установщик заключается в использовании модулей слияния. Эти модули установщика Майкрософт входят в состав установщика приложений и устанавливаются им. модули слияния для распространяемых dll-файлов находятся в каталоге установки Visual Studio в разделе \вк\редист\ MSVC \версия\мержемодулес\.. в более ранних версиях Visual Studio эти файлы находятся в каталоге \program files или \program files (x86) в общем подкаталоге modules филес\мерже. Дополнительные сведения об использовании этих файлов см. в разделе Распространение компонентов с использованием модулей слияния.
Отдельные распространяемые библиотеки DLL также включены в состав установки Visual Studio. по умолчанию они устанавливаются в каталог установки Visual Studio в папке \вк\редист\ MSVC \версия . Номера версии могут представлять различные дополнительные номера версии сборки для одного общего набора распространяемых файлов. Используйте последнюю версию любого файла библиотеки DLL, распространяемого пакета или модуля слияния в этих каталогах. Вы можете использовать эти библиотеки для локального развертывания, установив их в одном каталоге с приложением. Мы не рекомендуем локальное развертывание, так как тогда вам потребуется самостоятельно получать обновления для развернутых приложений. Предпочтительным является центральное развертывание с использованием распространяемых пакетов.
Чтобы определить, какие библиотеки DLL необходимо повторно распространить вместе с приложением, составьте список библиотек DLL, от которых зависит приложение. Обычно они указываются в виде входных данных импорта библиотек для компоновщика. Некоторые библиотеки, такие как vcruntime и универсальная библиотека времени выполнения языка C (UCRT), включаются по умолчанию. Если ваше приложение или одна из его зависимостей используют LoadLibrary для динамической загрузки библиотеки DLL, последняя может отсутствовать во входных данных компоновщика. Составить список динамически загружаемых библиотек DLL можно, например, запустив для своего приложения средство Dependency Walker (depends.exe), как описано в разделе Основные сведения о зависимостях приложения Visual C++. К сожалению, это средство устарело и может сообщить о том, что не удается найти некоторые библиотеки DLL.
Составив список зависимостей, сравните его со списком из файла Redist.txt, расположенного в каталоге установки Microsoft Visual Studio, или со "списком REDIST" распространяемых библиотек DLL, на который ссылается раздел "Файлы распространяемого кода" условий лицензионного соглашения на использование программного обеспечения корпорации Майкрософт для вашей копии Visual Studio. Visual Studio 2019 см. в разделе распространяемый код для Visual Studio 2019. Для Visual Studio 2017 см. раздел Распространяемый код для Microsoft Visual Studio 2017 (включает служебные программы, возможности расширяемости и файлы BuildServer). Для Visual Studio 2015 см. раздел Распространяемый код для Microsoft Visual Studio 2015 и пакета SDK для Microsoft Visual Studio 2015 (включает служебные программы и файлы BuildServer). Для Visual Studio 2013 этот список можно найти в разделе Распространяемый код для Microsoft Visual Studio 2013 и Microsoft Visual Studio 2013 SDK.
В версиях Visual Studio, предшествующих Visual Studio 2015, библиотека времени выполнения языка C (CRT) была включена в msvcверсия.dll в качестве распространяемой библиотеки DLL. Начиная с Visual Studio 2015 был проведен рефакторинг функций CRT в vcruntime и UCRT. UCRT теперь является системным компонентом в Windows 10 и более поздней версии, управляемой клиентский компонент Центра обновления Windows. он доступен во всех Windows 10 и более поздних операционных системах. Для развертывания приложения в более ранних операционных системах может потребоваться распространить и UCRT. Ранние версии UCRT входили в состав распространяемых файлов Visual Studio, которые устанавливаются только в операционных системах, предшествующих Windows 10, и только при отсутствии любой установленной версии UCRT. Сведения об устанавливаемой версии UCRT для систем прежних версий в виде пакета обновления системы Майкрософт см. в разделе Универсальная среда выполнения C Windows 10 в Центре загрузки Майкрософт.
невозможно повторно распространить все файлы, включенные в Visual Studio; вы можете повторно распространить только файлы, указанные в Redist.txt или в списке распространяемых веб-файлов. Отладочные версии приложений и различные библиотеки DLL отладки Visual C++ не являются распространяемыми. Дополнительные сведения см. в разделе Выбор метода развертывания.
В следующей таблице описываются некоторые библиотеки DLL Visual C++, от которых может зависеть ваше приложение.
Библиотека Visual C++ | Описание | Применяется к |
---|---|---|
.dllверсии vcruntime | Библиотека среды выполнения для машинного кода. | Приложения, использующие обычные службы запуска и завершения работы для языка C и C++. |
vccorlibверсия.dll | Библиотека среды выполнения для управляемого кода. | Приложения, использующие службы языка C++ для управляемого кода. |
msvcpверсия.dll и msvcpверсия_номер_dot.dll | Стандартная библиотека C++ для машинного кода. | Приложения, использующие стандартную библиотеку C++. |
concrtверсия.dll | Библиотека среды выполнения с параллелизмом для машинного кода. | Приложения, использующие среду выполнения с параллелизмом. |
mfcверсия.dll | Библиотека Microsoft Foundation Class (MFC). | Приложения, использующие библиотеку MFC. |
mfcверсияязык.dll | Ресурсы библиотеки Microsoft Foundation Classes (MFC). | Приложения, использующие определенные языковые ресурсы для MFC. |
mfcверсияu.dll | Библиотека MFC с поддержкой Юникода. | Приложения, использующие библиотеку MFC и требующие поддержку Юникода. |
mfcmifc80.dll | Библиотека управляемых интерфейсов MFC. | Приложения, использующие библиотеку MFC с элементами управления Windows Forms. |
mfcmверсия.dll | Управляемая библиотека MFC. | Приложения, использующие библиотеку MFC с элементами управления Windows Forms. |
mfcmверсияu.dll | Управляемая библиотека MFC с поддержкой Юникода. | Приложения, использующие библиотеку MFC с элементами управления Windows Forms и требующие поддержку Юникода. |
vcampверсия.dll | Библиотека AMP для машинного кода. | Приложения, использующие код библиотеки C++ AMP. |
vcompверсия.dll | Библиотека OpenMP для машинного кода. | Приложения, использующие код библиотеки C++ AMP. |
Библиотеку шаблонных классов ATL больше не требуется повторно распространять в качестве отдельного DLL-файла. Ее функции были переданы заголовкам и статической библиотеке.
Дополнительные сведения о повторном распространении этих библиотек DLL с приложением см. в разделе Распространение файлов Visual C++. Примеры приведены в разделе Примеры развертывания.
Как правило, повторное распространение системных DLL-файлов не требуются, поскольку они входят в состав операционной системы. Однако возможны исключения, например если приложение выполняется в нескольких версиях операционных систем Microsoft. В этом случае необходимо внимательно ознакомиться с соответствующими условиями лицензирования. Также попробуйте обновить системные библиотеки DLL с помощью центра обновления Windows, пакетов обновления или повторно распространяемых пакетов, предоставляемых Майкрософт.
В процессе отладки в Visual Studio окно Модули отображает список используемых приложением библиотек DLL и исполняемых файлов ( .exe), а также сведения о них.
Окно "Модули" недоступно при отладке SQL и скриптов.
Использование окна модулей
Чтобы открыть окно "Модули" во время отладки, выберите Отладка > Окна > Модули или нажмите клавиши CTRL+ALT+U.
По умолчанию модули в окне Модули упорядочены в порядке загрузки. Чтобы выполнить сортировку по любому столбцу окна, щелкните заголовок соответствующего столбца.
Загрузить символы
В столбце Состояние символов в окне Модули показано, для каких модулей загружены отладочные символы. Если здесь указано состояние Загрузка символов пропущена, Невозможно найти или открыть PDB-файл или Загрузка отключена параметром включения и исключения, вы можете загрузить символы вручную. Дополнительные сведения о загрузке и использовании символов см. в статье Указание файлов символов (.pdb) и исходных файлов.
Загрузка символов вручную
В окне Модули щелкните правой кнопкой модуль, для которого не загружены символы.
Выберите Сведения о загрузке символов, чтобы узнать, почему символы не были загружены.
Щелкните Загрузить символы, чтобы загрузить символы вручную.
Если символы не загружаются, выберите Параметры символов, чтобы открыть диалоговое окно Параметры и указать или изменить расположение для загрузки символов.
Вы можете скачать символы с общедоступных серверов символов Майкрософт или других аналогичных серверов, а также загрузить их из локальной папки на компьютере. Дополнительные сведения см. в разделе Настройка расположения файлов символов и поведения при загрузке.
Изменение параметров поведения при загрузке символов
В окне Модули щелкните правой кнопкой мыши любой модуль.
Выберите Параметры символов.
Выберите Загрузить все символы или выберите конкретные модули.
Изменение поведения загрузки символов для конкретного модуля
В окне Модули щелкните правой кнопкой мыши требуемый модуль.
В контекстном меню установите или снимите флажок Всегда загружать автоматически. Изменения вступят в силу при следующем сеансе отладки.
In Visual Studio 2010, under VC++ Directories > Executable Directories , I have specified the path to glew32d.dll . However, when I run the executable, it still complains.
On the other hand, if I copy the DLL into the local folder and run the executable then, it doesn't complain.
Can someone please tell me how to fix this? Also, why is Visual Studio not recognizing that path?
Update Scenario: I currently use a template project which I use as a starter code for a lot of my projects. This template depends on glew32d.dll. I usually store all dependent dlls in a common bin folder. I was hoping to reference this folder and Visual studio could read the dlls from there, instead of me having to copy the dlls everytime. What would be a good way to handle this?
@muntoo: What? Also, I disagree with the way you edited the last line. There aren't two separate questions there, so the original grammar was correct. The OP is asking how they can fix this in light of the fact that VS is not recognizing the path. The only reason they care about VS not recognizing the path is because it might lead them to a solution.
4 Answers 4
Specifying the path to the DLL file in your project's settings does not ensure that your application will find the DLL at run-time. You only told Visual Studio how to find the files it needs. That has nothing to do with how the program finds what it needs, once built.
Placing the DLL file into the same folder as the executable is by far the simplest solution. That's the default search path for dependencies, so you won't need to do anything special if you go that route.
To avoid having to do this manually each time, you can create a Post-Build Event for your project that will automatically copy the DLL into the appropriate directory after a build completes.
Alternatively, you could deploy the DLL to the Windows side-by-side cache, and add a manifest to your application that specifies the location.
I developed an application that depends on a DLL file. When I debug my application, the applicationwould complain that:
"This application has failed to start because xxx.dll was not found."
So I have to copy the DLL file into the same directory as my .vcproj file.
Is there a way to set the project to look for the DLL file in (preferably) some relative path or (not preferred) some absolute path?
Similar concept to how we set include and library path in the project settings.
I mean when I debug my application (hitting F5 ) the above error would pop up.
7 Answers 7
- Go to project properties (Alt+F7)
- Under Debugging, look to the right
- There's an Environment field.
- Add your relative path there (relative to vcproj folder) i.e. ..\some-framework\lib by appending PATH=%PATH%;$(ProjectDir)\some-framework\lib or prepending to the path PATH=C:\some-framework\lib;%PATH%
- Hit F5 (debug) again and it should work.
The Environment field takes NAME=VALUE semicolon-delimited pairs. Append to the PATH variable to have the VS Debugger search additional locations for DLLs: PATH=%PATH%;$(ProjectDir)lib
Alt-F7 brings up a temporary dialog box listing the Active Tool Windows and Active Files (Visual Studio 2017 Community). Is there no way to get to project properties though an old-fashioned menu command? I can't seem to find it.
@SlippD.Thompson Ah, reading your comment again, I think I misunderstood what you meant. Yes, I agree. But at least, there are some hotkeys never changed in Visual Studio, and 'Alt + p, p' is one of them. It was there along with 'Alt + F7', which means now something else as you know. Also, 'Alt + p, p' just means 'Project menu > * Properties'.
Go through project properties -> Reference Paths
Then add folder with DLL's
Please don't post identical answers to multiple questions. Post one good answer, then vote/flag to close the other questions as duplicates. If the question is not a duplicate, tailor your answers to the question.
This doesn't seem to be available in Visual Studio 2015 in a C++ project. Which combination of Visual Studio version and project type supports this option?
The search path that the loader uses when you call LoadLibrary() can be altered by using the SetDllDirectory() function. So you could just call this and add the path to your dependency before you load it.
Another possibility would be to set the Working Directory under the debugging options to be the directory that has that DLL.
Edit: I was going to mention using a batch file to start Visual Studio (and set the PATH variable in the batch file). So then did a bit of searching and see that this exact same question was asked not long ago in this post. The answer suggests the batch file option as well as project settings that apparently may do the job (I did not test it).
In your Project properties(Right click on project, click on property button) ▶ Configuration Properties ▶ Build Events ▶ Post Build Events ▶ Command Line.
Edit and add one instruction to command line. for example copy botan.dll from source path to location where is being executed the program.
I have no idea if it is right to do that, but the IDE gives me that option and it has been useful, I think it's a good option if I want to copy all the necessary files to another folder to distribute your program. Simple spell but effective. Here in this question there are different answers to reach the same end. But I use this option and avoid many headaches.
The other options didn't work for me, only this one, but it seems like the others should be the right way to go.
I had the same problem and my problem had nothing to do with paths. One of my dll-s was written in c++ and it turnes out that if your visual studio doesn't know how to open a dll file it will say that it did not find it. What i did was locate which dll it did not find, than searched for that dll in my directories and opened it in a separate visual studio window. When trying to navigate through Solution explorer of that project, visual studio said that it cannot show what is inside and that i need some extra extensions, so that it can open those files. Surely enough, after installing the recomended extension (in my case something to do with c++) the
"This application has failed to start because xxx.dll was not found."
error miraculously dissapeared.
I agree, but as i wrote before, i just installed what visual studio recomended. It was about 4GB of data and since i did not know what was truly neccesary i just installed all of them and did not look closer into every item.
looks like the DLL had a dependency (i.e. requires another DLL) which was not present or at least not on your PATH until you installed VC++.
Читайте также: