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.