Visual Studio : 상대 어셈블리 참조 경로


96

솔루션 디렉토리에있는 어셈블리에 대한 참조를 추가 할 때 상대적으로 추가 할 수있는 방법이 있습니까? 그러면 저장소에서 체크인 및 체크 아웃 할 때 프로젝트에서 올바르게 참조됩니다.


13
UI에서 제대로 작동하지 않는 경우 .proj 파일을 직접 직접 편집하고 경로를 상대 경로로 변경할 수 있습니다. 어느 쪽이든 변경하면 입력 한 그대로 유지됩니다.
Pavel Minaev

1
Visual Studio 2010에서 참조 경로는 기본적으로 상대 경로로 저장되므로이 문제가 발생하면 다른 문제가있는 것입니다. 제 경우에는 버전 제어에서 무시 된 dll을 차단하여 솔루션을 컴파일 할 수 있었지만 동료는 할 수 없었습니다.
Giles Roberts

답변:


124

Pavel Minaev의 원래 주석을 확장하려면-Visual Studio 용 GUI는 .sln이 상대 참조의 루트라는 가정하에 상대 참조를 지원합니다. 따라서 솔루션이있는 경우 C:\myProj\myProj.sln하위 폴더에 추가하는 모든 참조 C:\myProj\는 자동으로 상대 참조로 추가됩니다.

와 같은 별도의 디렉토리에 상대 참조를 추가하려면 C:/myReferences/myDLL.dll다음을 수행하십시오.

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가 ...를 선택하여 Visual Studio GUI에서 참조를 추가합니다 .
  2. 이 참조가있는 * .csproj를 찾아 텍스트 편집기에서 엽니 다.
  3. <HintPath>를 다음과 같도록 편집하십시오.

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

이것은 이제 C:\myReferences\myDLL.dll.

도움이 되었기를 바랍니다.


20
이것이 유용하고 정확하다는 것을 이해하지만 VS GUI 가 상대 참조를 추가하는 방법을 심각하게 제공하지 않습니까?
kdbanman

4
VS 2015 년 내가 기본 (상대 경로)하여이 동작 있어요
Mugen는

2
나는 호기심에서 당신의 지시를 따를 때까지 그것이 절대적인 경로를 추가했다고 확신했습니다. VS는 참조 속성에서 절대 경로를 표시했지만 <HintPath>는 이미 상대 경로로 표시되었습니다. 내가 파일을 잃어버린 것으로 밝혀졌다 O_o lolimaderp!
donutguy640

@ donutguy640 저도 혼란스러워했습니다. 또한 속성 창에 상대 경로를 표시해야합니다
Alexander Derck

1
프로젝트 파일을 직접 편집 할 필요가 없습니다. 참조 추가 대화 상자에서 "찾아보기"를 선택하고 프로젝트 파일이있는 폴더로 이동 한 다음 DLL에 대한 상대 경로를 추가합니다. 속성 창에 절대 경로가 표시되지만 상대 경로는 프로젝트 파일에 저장됩니다. VS는 실제로 프로젝트 파일에 저장된 것처럼 경로를 표시해야합니다.
needfulthing

9

예, lib /와 같은 솔루션에 디렉토리를 만든 다음 파일 시스템의 해당 디렉토리에 dll을 추가하고 프로젝트에 추가하십시오 (추가-> 기존 항목-> 등). 그런 다음 프로젝트를 기반으로 참조를 추가하십시오.

나는 svn과 cvs에서 이것을 여러 번 수행했습니다.


5
프로젝트 자체에 dll을 추가 할 필요가 없습니다. 참조 만 추가하면됩니다. 가장 좋은 방법은 전체 'lib'디렉토리를 소스 컨트롤에 추가하는 것입니다. 예제로 code.google.com/p/projectpilot/source/browse/#svn/trunk 를 참조하십시오
Igor Brejc

1
당신이 옳습니다. 이전 프로젝트를 확인했는데 디렉토리 나 dll이 프로젝트 자체에 추가되지 않았으며 저장소에만 추가되었습니다. 그리고 참조는 프로젝트에 상대적입니다. 미안합니다.
Freddy

3

VS 2017에서는 자동입니다. 그래서 Add Reference평소처럼.

참고 Reference Properties 절대 경로 나타내지 만에 .vbproj/.csproj대하여 사용된다.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>

2

아마도이를 달성하는 가장 쉬운 방법은 어셈블리에 참조를 추가 한 다음 해당 Visual Studio 프로젝트 파일 (확장자 .csproj)에서 참조의 텍스트 표현을 (수동으로) 패치하여 상대가되도록하는 것입니다.

나는 문제없이 VS 2005에서 이것을 많이했습니다.


3
프로젝트 파일을 수동으로 수정할 필요는 없다고 생각합니다. 내 경험상 Visual Studio는 항상 상대 경로를 사용합니다. 프로젝트 파일을 직접 수정해야하는 유일한 시간은 키 파일 (.snk)을 공유하고 싶을 때였습니다. Visual Studio는 항상 키 파일을 프로젝트 디렉터리에 복사하기 만하면 키 파일의 여러 복사본이 생성됩니다.
Stefan Egli

1

여기에 있지 않을 수도 있지만 대답은 분명한 것 같습니다. 프로젝트 속성에서 참조 경로를 살펴보십시오. 설정에서 공통 저장소 폴더를 참조 경로 GUI 창에 추가했습니다.

VS20xx의 참조 경로

이렇게하면 내 dll (게시 준비)을이 폴더에 복사 할 수 있으며 이제 모든 개발자는이 폴더에서 빌드 할 때마다 업데이트 된 DLL을받습니다.

솔루션에 dll이있는 경우 빌더는 게시 된 팀 버전보다 로컬 버전의 우선 순위를 지정해야합니다.


불행히도 이것은 csproj.user 파일에 보관되며 상대적이 아닙니다.
Jamie Kitson

0

앞서 언급했듯이 프로젝트의 .csproj 적용하기 위해 파일을 있습니다.

또한 Visual Studio 2013이 참조 힌트 경로에 상대 경로를 적용하려고 시도하는 것도 발견했습니다. 아마도 프로젝트 파일을 더 이식 가능하게 만들려는 시도 때문일 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.