Visual Studio 프로젝트의 폴더에 대한 "링크로 추가"


127

Visual Studio에서는 "링크로 추가"를 사용하여 솔루션의 다른 프로젝트에있는 파일에 대한 링크를 추가 할 수 있습니다.

전체 폴더에 대해이 작업을 수행 할 수있는 방법이 있습니까? 그래서 프로젝트 A의 전체 폴더를 해당 폴더의 새 항목에 수동으로 연결할 필요없이 프로젝트 B에서 볼 수 있습니까?

답변:


141

블로그 게시물에서 언급했듯이 가능합니다.

<ItemGroup>
    <Compile Include="any_abs_or_rel_path\**\*.*">
        <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
</ItemGroup>

그러나 파일은 복사되지 않습니다.


18
+1. 을 사용 <Content ...>하고 추가 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>하여 Visual Studio에서 빌드시 리소스를 복사 할 수 있습니다.
Markus Jarderot

8
<None>...</None>대신 사용하십시오 <Compile>...</Compile>. 그러나 나는 그것이 어쨌든 그 파일을 복사 할 것이라고 생각합니다 .VisualStudio조차도 링크 된 파일 로이 작업을 수행합니다.
mo.

4
@ 모. 귀하의 답변은 프로젝트 루트의 모든 파일에 대한 링크를 추가하지만 때로는 불편합니다. % (RecursiveDir)은 일부 링크 폴더 이름으로 변경되어야합니다. 예를 들어이 솔루션의 다른 프로젝트에서 wp7 프로젝트 'MyMainProject'의 소스 폴더를 링크하려면 <ItemGroup> <Compile Include = ".. \ .. \ MyMainProject \ MyMainProject \ engine *. * "> <Link> engine \ % (FileName) </ Link> </ Compile> </ ItemGroup>
Tertium

23
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>파일 이름에서 확장명이 떨어지지 않도록 사용해야 했습니다.
Joe Daley

2
Icon Png 리소스 : <EmbeddedResource Include = ".. \ .. \ Icons \ 16 * .png">
ChrisB

126

VS2012 이상에서는 Alt 키를 누른 상태 에서 폴더를 다른 프로젝트로 드래그 할 수 있습니다 . 각 파일을 링크로 수동으로 추가하는 것과 동일하지만 더 빠릅니다.

upd : VS2013 업데이트 2 ( 공유 프로젝트 참조 관리자 사용 ) 또는 VS2015를 사용하는 경우 공유 프로젝트 사용을 고려하십시오 .


1
VS2010에서는 파일과 디렉토리를 링크로 추가하지 않고 복사하여 원치 않는 복제본을 만듭니다.
Tom

3
참고 : 폴더는 Windows 탐색기 (Visual Studio의 다른 인스턴스가 아님)에서 끌어 야합니다. 또한 오른쪽 클릭 드래그가 아니라 왼쪽 클릭 드래그 여야합니다. VS2012에서 훌륭하게 작동합니다.
david pricesev

11
폴더 자체에 대한 링크가 아니라 소스 폴더의 모든 파일에 대한 링크 만 생성한다고 생각합니다. 즉, 파일을 소스 폴더에 추가하면 자동으로 연결되지 않습니다.
Johnny5

1
@MauryMarkowitz, Windows 탐색기 또는 다른 것이 아닌 VS 프로젝트에서 폴더를 드래그해야합니다.
mt_serg

1
@MauryMarkowitz, 단일 솔루션, 두 프로젝트. Alt 키를 누른 상태에서 Folder1을 Project1에서 Project2로 끕니다. Project1 / Folder1의 각 파일은 Project2 / Folder1에 링크로 추가됩니다.
mt_serg 2014 년

37

mo의 답변에 하나의 추가 . 콘텐츠 항목을 연결하는 경우 Marcus의 주석과 파일 확장자를 포함해야합니다.

<ItemGroup>
  <Compile Include="any_abs_or_rel_path\**\*.*">
    <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Compile>
</ItemGroup>

이게 뭐야 <Compile ...? 내 경우에는 .ts파일을 새 프로젝트 로 참조해야합니다 . 어떻게했는지. 감사!
Rahmathullah M

23

링크 된 폴더가 IDE에 표시되도록하는 원래 쿼리의 일부와 관련하여이 파일을 달성 할 수 있습니다. 따라서 솔루션 탐색기에 모든 링크 된 파일이있는 폴더가 있습니다. 해결책. 이를 위해 다음을 추가하십시오.

  <ItemGroup>
    <Compile Include="..\anypath\**\*.*">
      <Link>MyData\A\%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
  </ItemGroup>

여기에는 솔루션 탐색기의 MyData라는 새 폴더에 링크 된 디렉토리의 모든 파일이 포함됩니다. 위 코드에서 'A'는 무엇이든 호출 할 수 있지만 폴더가 나타나려면 있어야합니다.


트릭을 수행하는 것처럼 보이지만 Form 파일을 하나로 접지 않고 .resx 파일에 오류가 발생합니다 (VB를 사용하고 있습니다). 어쨌든 고마워
Ivan Ferrer Villa

1
@IvanFerrerVilla, 예, 내가 알아 차린 몇 가지 문제가 있지만 대부분의 경우 외모에만 좋습니다.
Adam

3
Visual Studio 2015에서는`A`가 없어도 나에게 도움이되었습니다.
Martin

7

폴더를 참조로 추가하고 컴파일하지 않으려면 다음을 사용하십시오.

<Content Include="any_path\**\*.*">
  <Link>folder_in_B_project\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>

0

껍질을 벗기고 상징적 인 링크를 추가하십시오.

그런 다음 runas 관리자

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

BAM 심볼릭 링크!

/ d는 디렉토리 링크를 지정합니다.

Vista에서 즉시 사용할 수 있습니다. XP로 백 포트 할 수 있습니다.

여기에 설명서 : http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx

심볼릭 링크에 익숙하지 않은 사용자에게는 기본적으로 다른 파일 또는 디렉토리에 대한 포인터입니다. 응용 프로그램에 투명합니다. 디스크에 하나의 사본이 있으며 여러 가지 방법으로 디스크를 처리 할 수 ​​있습니다. 다른 주소에 대한 포인터가 아니라 동일한 파일에 대한 NTFS의 실제 파일 ID 항목 인 "하드 링크"를 만들 수도 있습니다.

참고 : 주석에 명시된 바와 같이 이것은 심볼릭 링크를 만든 컴퓨터에서만 작동하며 git와 같은 버전 제어 시스템에서는 작동하지 않습니다.


2
이것은 스크립트를 작성하지 않은 한 단일 개발자에게만 유용합니다. 다른 솔루션은 공유 소스 코드의 일부를 구성하므로보다 보편적으로 유용합니다.
JRoughan

요청 된 질문은 공유 소스 코드에 관한 것이 아닙니다. 즉, msysgit은 심볼릭 링크를 지원하지 않으므로 번거 롭습니다.
John Vance

1
이것은 파일 시스템 질문이 아닙니다. 또한이 아이디어는 다른 소스 제어 시스템과 백업 리소 어 시스템에서 심각한 부작용을 일으킬 것입니다
g.pickardou

내 질문을 편집하거나 삭제할 수 없습니다. 당신의 첫번째 반대는 바보입니다. 이 질문은 또한 명시 적으로 프로젝트 파일 편집 질문이 아니기 때문에 모든 답변을 다운 투표해야합니다. 두 번째 이의가 제기되었으며, 그 경고를 추가하기 위해 답변을 편집 할 수 있다면 그렇게 할 것입니다.
John Vance
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.