Eu tenho um projeto Visual Studio C ++ que depende de um arquivo DLL externo. Como posso fazer o Visual Studio copiar este arquivo DLL automaticamente para o diretório de saída (depurar / liberar) quando eu construir o projeto?
visual-studio
visual-c++
dll
Esteira
fonte
fonte
$ (OutDir) acabou sendo um caminho relativo no VS2013, então tive que combiná-lo com $ (ProjectDir) para obter o efeito desejado:
BTW, você pode depurar facilmente os scripts adicionando 'echo' no início e observar o texto expandido na janela de saída do build.
fonte
Os detalhes na seção de comentários acima não funcionaram para mim (VS 2013) ao tentar copiar a dll de saída de um projeto C ++ para a pasta de lançamento e depuração de outro projeto C # dentro da mesma solução.
Tive que adicionar a seguinte ação pós-construção (clique com o botão direito no projeto que tem uma saída .dll) e propriedades -> propriedades de configuração -> eventos de compilação -> evento pós-compilação -> linha de comando
agora adicionei estas duas linhas para copiar a dll de saída para as duas pastas:
fonte
(Esta resposta se aplica apenas a C #, não C ++, desculpe, eu interpretei mal a pergunta original)
Já passei por um inferno de DLL como este antes. Minha solução final foi armazenar as DLLs não gerenciadas na DLL gerenciada como recursos binários e extraí-las para uma pasta temporária quando o programa for iniciado e excluí-las quando for descartado.
Isto deveria fazer parte da infraestrutura .NET ou pinvoke, uma vez que é tão útil .... Ele torna sua DLL gerenciada fácil de gerenciar, tanto usando Xcopy ou como uma referência de projeto em uma solução Visual Studio maior. Depois de fazer isso, você não precisa se preocupar com eventos pós-construção.
ATUALIZAR:
Postei o código aqui em outra resposta https://stackoverflow.com/a/11038376/364818
fonte
Adicione COPY integrado ao arquivo project.csproj :
fonte
Você também pode se referir a um caminho relativo, o próximo exemplo encontrará a DLL em uma pasta localizada um nível acima da pasta do projeto. Se você tiver vários projetos que usam a DLL em uma única solução, isso colocará a origem da DLL em uma área comum acessível quando você definir qualquer um deles como o Projeto de inicialização.
A
/y
opção copia sem confirmação. A/d
opção verifica se um arquivo existe no destino e se ele copia apenas se a origem tiver um carimbo de data / hora mais recente que o destino.Descobri que pelo menos em versões mais recentes do Visual Studio, como VS2109,
$(ProjDir)
é indefinido e teve que usar em seu$(ProjectDir)
lugar.Deixar de fora uma pasta de destino
xcopy
deve ser o padrão para o diretório de saída. É importante entender que a razão por$(OutDir)
si só não ajuda.$(OutDir)
, pelo menos nas versões recentes do Visual Studio, é definido como um caminho relativo para a pasta de saída, comobin/x86/Debug
. Usá-lo sozinho como destino criará um novo conjunto de pastas a partir da pasta de saída do projeto. Ex:… bin/x86/Debug/bin/x86/Debug
.Combiná-lo com a pasta do projeto deve levá-lo ao lugar adequado. Ex:
$(ProjectDir)$(OutDir)
.No entanto
$(TargetDir)
, fornecerá o diretório de saída em uma etapa.Lista da Microsoft de macros MSBuild para versões atuais e anteriores do Visual Studio
fonte