Eu tenho alguns arquivos dll na pasta \ lib da minha pasta de projeto. Na página de propriedades da dll, selecionei "Build Action" como "Content" e "Copy to Output Directory" como "Copy always".
Após a compilação, estou realmente copiando a dll, mas eles estão dentro de \ bin \ Release \ lib e não em \ bin \ Release.
Existe uma maneira de copiar arquivos dll para \ bin \ Release (e não para \ bin \ Release \ lib) sem escrever um script pós-compilação ou recorrer a nant etc?
fonte
ContentWithTargetPath
quebras de compilação incremental (testado em VS 2017 15.9.9)Mantenha-os dentro
$(ProjectDir)\Lib
, mas adicione esses arquivos " como um link " à raiz do seu .csproj. Agora eles serão copiados para bin \ Debug (ou qualquer outra pasta de saída) sem estar em lib.EDIT: Esta resposta foi escrita há muito tempo quando ContentWithTargetPath não estava disponível nas versões do VS / MSBuild que eu estava usando. Deixando esta resposta aqui para pessoas que podem ter que usar uma versão mais antiga do VS. Por favor, pare de comentar sobre isso, todos nós sabemos que existem maneiras melhores agora.
fonte
Se sua intenção principal é incluir DLLs sem bagunçar o diretório raiz do projeto, outra solução é mover as DLLs para um Projeto Compartilhado separado e adicioná-lo como uma referência no projeto original.
(Observe que este post não responde diretamente a esta pergunta, pois não preserva a pasta e a estrutura do projeto, mas achei essa abordagem útil porque fui capaz de reestruturar meu projeto no meu caso e porque queria evitar alguns dos desvantagens das outras abordagens aqui.)
Passos
Solution -> Add -> New Project -> Shared Project
Build Action: Content
eCopy to Output Directory: Copy Always
)References -> Add Reference -> Shared Projects
A configuração é semelhante a esta:
fonte
Adicione os arquivos dll como uma referência ao projeto e na referência defina "Copiar local" como verdadeiro.
fonte
Se você precisar copiar arquivos do diretório Libs para a pasta raiz VS2017:
Para qualquer outra pasta, incluindo a pasta Libs (RecursiveDir)
fonte
Parece no VisualStudio 2015 que se as dlls que você está 'adicionando com um link' estão em uma subpasta desse mesmo projeto - elas serão automaticamente colocadas em uma pasta e a saída também será colocada em uma pasta como você viu.
Se as dlls estiverem em outro projeto ou diretório no disco que não esteja em uma subpasta do projeto , você pode 'Adicionar com um link' e elas serão colocadas no diretório raiz sem problemas.
fonte
Um método alternativo é apenas deixar os itens como tipo
None
. No explorador de soluções, clique naqueles que deseja implantar e defina aContent
propriedade comoTrue
.Nota: Eu fiz isso no VS2019, e as coisas podem mudar de versão para versão.
Para fazer isso funcionar, agora clique com o botão direito em seu projeto e selecione "Descarregar projeto". Em seguida, clique com o botão direito do mouse no projeto descarregado e selecione "Editar project_name.vcxproj".
No editor, vá até o final do arquivo e insira este destino logo antes da
</Project>
tag final :Agora, clique com o botão direito no projeto descarregado e selecione "Recarregar Projeto". Selecione para salvar e fechar se for solicitado.
Eu também defino o
OutputDirectory
para:$(SolutionDir)bin\$(Configuration)\$(Platform)\
e
IntermediateDirectory
para:$(SolutionDir)obj\$(Configuration)\$(ProjectName)\$(Platform)\
na página Geral de Propriedades do Projeto. Isso coloca a saída em uma pasta "bin" e os intermediários em uma pasta "obj" na raiz de sua solução.
Nota: O
$(SolutionDir)
não é definido quando você executa o MSBuild a partir da linha de comando. Há um truque que você pode usar para definir isso para a pasta onde o arquivo .sln reside usando GetDirectoryNameOfFileAbove. (deixado como um exercício para o leitor). Além disso, parece que em 2019 eles estão lidando com isso corretamente na linha de comando. Sim :) O$(SolutionDir)
contém uma barra invertida final, portanto, nenhuma depois dele. Os resultados de cada um devem ter uma barra invertida no final.Agora, se você possui o Pro ou superior, não faça isso sempre que precisar criar um projeto. Isso seria coxo. Em vez disso, depois de configurar o projeto do jeito que você gosta, selecione
Project -> Export Template
. Você dá um nome a ele e, da próxima vez que quiser criar um projeto como aquele, basta escolher esse nome na caixa de diálogo Novo projeto. (Na versão mais antiga, acho que eraFiles -> Export Teamplate...
.)fonte
Eu tive o mesmo problema com o Visual Studio 2010 / C # Project.
Para assemblies (ou seja, tendo a interface .NET), use a pasta "References" em seu projeto no Solution Explorer. Clique com o botão direito, escolha "Adicionar item existente" e localize o conjunto .dll.
Arquivos .dll comuns podem ser colocados em uma subpasta (como "\ lib" foi mencionado acima) e nas propriedades selecione:
Isso funcionou exatamente como desejado - durante a compilação, os .DLLs são copiados para o diretório de saída sem a subpasta "\ lib".
fonte