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.