Visual Studio: caminhos de referências relativas de montagem

96

Ao adicionar uma referência a um assembly localizado no diretório da solução, há alguma maneira de adicioná-lo relativamente, de modo que, quando feito o check-in e check-out de um repositório, ele seja referenciado nos projetos corretamente?

theringostarrs
fonte
13
Se não funcionar bem na IU, lembre-se de que você pode apenas editar manualmente o arquivo .proj diretamente e alterar o caminho para relativo. Depois de alterar de qualquer maneira, ele permanece da forma como você o colocou.
Pavel Minaev
1
No Visual Studio 2010, os caminhos de referência são armazenados como relativos por padrão, portanto, se isso estiver acontecendo com você, algo está errado. No meu caso, eu tinha ignorado dlls do controle de versão para que pudesse compilar a solução, mas meus colegas de trabalho não.
Giles Roberts de

Respostas:

124

Para expandir o comentário original de Pavel Minaev - A GUI para Visual Studio oferece suporte a referências relativas com a suposição de que seu .sln é a raiz da referência relativa. Portanto, se você tiver uma solução C:\myProj\myProj.sln, todas as referências adicionadas em subpastas de C:\myProj\são adicionadas automaticamente como referências relativas.

Para adicionar uma referência relativa em um diretório separado, como C:/myReferences/myDLL.dll, faça o seguinte:

  1. Adicione a referência na GUI do Visual Studio clicando com o botão direito do mouse no projeto no Solution Explorer e selecionando Add Reference ...
  2. Encontre o * .csproj onde esta referência existe e abra-o em um editor de texto
  3. Edite o <HintPath> para ser igual a

    <HintPath>..\..\myReferences\myDLL.dll</HintPath>

Isso agora faz referência C:\myReferences\myDLL.dll.

Espero que isto ajude.

CrimsonX
fonte
20
Eu entendo que isso é útil e correto, mas a interface do VS realmente não fornece uma maneira de adicionar uma referência relativa?
kdbanman
4
No VS 2015, obtive esse comportamento por padrão (caminho relativo)
Mugen
2
Estava convencido de que havia acrescentado um caminho absoluto, até que segui suas instruções por curiosidade. VS mostrou um caminho absoluto nas propriedades de referência, mas <HintPath> já era relativo. Acontece que estavam faltando arquivos O_o lolimaderp!
donutguy640
@ donutguy640 Isso também me confundiu. Eles também devem mostrar o caminho relativo no painel de propriedades
Alexander Derck
1
Você não precisa editar diretamente o arquivo do projeto. Selecione "navegar" na caixa de diálogo Adicionar referência, navegue até a pasta com o arquivo do projeto e, em seguida, adicione o caminho relativo à DLL. Embora um caminho absoluto seja exibido na janela de propriedades, o caminho relativo é salvo no arquivo de projeto. O VS realmente deve exibir o caminho exatamente como está salvo no arquivo do projeto.
necessário
9

Sim, apenas crie um diretório em sua solução como lib / e, em seguida, adicione sua dll a esse diretório no sistema de arquivos e adicione-o ao projeto (Adicionar-> Item Existente-> etc). Em seguida, adicione a referência com base em seu projeto.

Eu fiz isso várias vezes em svn e em cvs.

Freddy
fonte
5
Você não precisa adicionar a dll ao projeto em si, apenas adicione uma referência a ela. A melhor coisa a fazer é adicionar todo o diretório 'lib' ao seu controle de origem. Veja code.google.com/p/projectpilot/source/browse/#svn/trunk como exemplo
Igor Brejc
1
Você está certo. Verifiquei um projeto antigo e nem o diretório nem as dlls foram adicionados ao próprio projeto, apenas ao repositório. E a referência é então relativa ao projeto. Me desculpe por isso.
Freddy
3

No VS 2017 é automático. Então, Add Referencetão normalmente.

Observe que Reference Propertieso caminho absoluto é mostrado, mas o .vbproj/.csprojrelativo é usado.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
Iurii Vasylenko
fonte
2

Provavelmente, a maneira mais fácil de conseguir isso é simplesmente adicionar a referência ao assembly e, em seguida (manualmente) corrigir a representação textual da referência no arquivo de projeto do Visual Studio correspondente (extensão .csproj) de modo que se torne relativo.

Já fiz isso várias vezes no VS 2005 sem problemas.

Uwe Honekamp
fonte
3
Acho que não é necessário modificar o arquivo do projeto manualmente. Na minha experiência, o Visual Studio sempre usa caminhos relativos. A única vez que tive que modificar o arquivo de projeto manualmente foi quando quis compartilhar um arquivo de chave (.snk). O Visual Studio sempre apenas copia o arquivo-chave para o diretório do projeto, o que resulta em várias cópias do arquivo-chave.
Stefan Egli
1

Posso estar errado aqui, mas parece que a resposta é bastante óbvia: observe os caminhos de referência nas propriedades do projeto. Em nossa configuração, adicionei nossa pasta de repositório comum, para a janela ref path GUI, assim

Caminhos de referência em VS20xx

Dessa forma, posso copiar minhas dlls (prontas para publicação) para esta pasta e cada desenvolvedor agora obtém a DLL atualizada sempre que compilar a partir desta pasta.

Se a dll for encontrada na Solução, o construtor deve priorizar a versão local sobre a versão da equipe publicada.

cristão
fonte
Infelizmente, isso é mantido no arquivo csproj.user e não é relativo.
Jamie Kitson
0

Como mencionado antes, você pode editar manualmente o .csprojarquivo do seu projeto para aplicá-lo manualmente.

Também percebi que o Visual Studio 2013 tenta aplicar um caminho relativo ao hintpath de referência, provavelmente devido a uma tentativa de tornar o arquivo de projeto mais portátil.

Nick L.
fonte