Como definir o caminho para um arquivo DLL no Visual Studio?


130

Eu desenvolvi um aplicativo que depende de um arquivo DLL. Quando depuro meu aplicativo, ele reclama que:

"Esta aplicação falhou ao iniciar porque xxx.dll não foi encontrado."

Então, eu tenho que copiar o arquivo DLL no mesmo diretório do meu arquivo .vcproj.

Existe uma maneira de definir o projeto para procurar o arquivo DLL em (preferencialmente) algum caminho relativo ou (não preferido) algum caminho absoluto?

Conceito semelhante ao modo como definimos o caminho de inclusão e biblioteca nas configurações do projeto.

Quero dizer, quando depuro meu aplicativo (pressionando F5), o erro acima aparece.

Respostas:


196
  1. Vá para as propriedades do projeto (Alt + F7)
  2. Em Depuração, olhe para a direita
  3. Há um campo Ambiente.
  4. Adicione seu caminho relativo (em relação à pasta vcproj), por exemplo .. \ some-framework \ lib, anexando PATH=%PATH%;$(ProjectDir)\some-framework\libou anexando o caminhoPATH=C:\some-framework\lib;%PATH%
  5. Aperte F5 (debug) novamente e deve funcionar.

15
O campo Ambiente usa NAME = VALUE pares delimitados por ponto e vírgula. Acréscimo para a variável PATH para ter procurar o VS Debugger locais adicionais para DLLs: PATH =% PATH%; $ (ProjectDir) lib
— Brent Faust

1
Existe uma maneira semelhante de fazer também a versão Build?
— Narek

Eu precisava adicionar o caminho da DLL à variável $ (LibraryPath) (ou incluí-lo na lista em Diretórios da biblioteca na configuração Config Properties-> VC ++ Directories).
— Foster Boondoggle

1
@ SlippD.Thompson Sim, você está certo. Mas você pode conseguir a mesma coisa usando Alt + p, p.
— Jenix 14/09/19

1
@ SlippD.Thompson Ah, lendo seu comentário novamente, acho que não entendi o que você quis dizer. Sim eu concordo. Mas pelo menos, existem algumas teclas de atalho nunca alteradas no Visual Studio e 'Alt + p, p' é uma delas. Estava lá junto com 'Alt + F7', o que significa agora outra coisa como você sabe. Além disso, 'Alt + p, p' significa apenas 'menu Projeto> * Propriedades'.
— Jenix 17/09/19

7

O caminho de pesquisa que o carregador usa quando você chama LoadLibrary () pode ser alterado usando a função SetDllDirectory () . Então você pode simplesmente chamar isso e adicionar o caminho à sua dependência antes de carregá-lo.

Consulte também Ordem de pesquisa de DLL .


7

Percorra as propriedades do projeto -> Caminhos de Referência

Em seguida, adicione uma pasta com as DLLs


4
Não poste respostas idênticas para várias perguntas. Poste uma boa resposta e vote / sinalize para fechar as outras perguntas como duplicadas. Se a pergunta não for duplicada, adapte suas respostas à pergunta.
— durron597

1
de longe a melhor resposta :)
— Rathma 23/10

2
Isso não parece estar disponível no Visual Studio 2015 em um projeto C ++. Qual combinação de versão e tipo de projeto do Visual Studio suporta essa opção?
— Filip Bártek

A pergunta do OP era sobre C ++, mas esta resposta é para C #.
— Jenix 14/09/19

Não funcionou para mim com c # e VS2017
— mherzog 27/07

4

Outra possibilidade seria definir as Working Directoryopções de depuração como o diretório que possui essa DLL.

Editar: eu mencionaria o uso de um arquivo em lotes para iniciar o Visual Studio (e definir a variável PATH no arquivo em lotes). Então, pesquisamos um pouco e constatamos que essa mesma pergunta foi feita há pouco tempo neste post . A resposta sugere a opção de arquivo em lote, bem como as configurações do projeto que aparentemente podem fazer o trabalho (não testei).


e se eu depender de 2 dlls, cada um vive em seu próprio diretório? (i simplificado minha pergunta acima)
— sivabudh

Eu não acho que seria possível fazer essa solução funcionar para mais de um único diretório.
— Mark Wilkins

3

Nas propriedades do projeto (clique com o botão direito do mouse no projeto, clique no botão de propriedade) ▶ Propriedades de configuração ▶ Criar eventos ▶ Eventos pós-compilação ▶ Linha de comando.

Edite e adicione uma instrução à linha de comandos. por exemplo, copie o botan.dll do caminho de origem para o local em que o programa está sendo executado.

copy /Y "$(SolutionDir)ProjectDirs\x64\Botan\lib\botan.dll" "$(TargetDir)"

Propriedades do Projeto


Não tenho idéia se é certo fazer isso, mas o IDE me dá essa opção e foi útil, acho que é uma boa opção se eu quiser copiar todos os arquivos necessários para outra pasta para distribuir seu programa. Feitiço simples, mas eficaz. Aqui nesta pergunta existem respostas diferentes para alcançar o mesmo fim. Mas eu uso essa opção e evito muitas dores de cabeça.
— Joma

As outras opções não funcionaram para mim, apenas esta, mas parece que as outras devem ser o caminho certo a seguir.
— rjferguson

-1

Eu sei que essa pergunta foi respondida anos atrás, mas para aqueles como eu que precisavam mudar onde o depurador inicia o aplicativo, altere a propriedade de comando em Propriedades do projeto -> Depuração.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.