Thêm vào như Link Link cho các thư mục trong các dự án Visual Studio


127

Trong Visual Studio, chúng ta có thể "Thêm dưới dạng liên kết" để thêm một liên kết đến một tệp trong dự án khác trong giải pháp.

Có cách nào để làm điều này cho toàn bộ thư mục, để toàn bộ thư mục trong dự án A sẽ hiển thị trong dự án B mà không cần phải liên kết thủ công với các mục mới trong thư mục đó không?

Câu trả lời:


141

Như blogpost này đã nêu, nó là có thể.

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

Nhưng hãy lưu ý, các tập tin sẽ không được sao chép.


18
+1. Bạn cũng có thể sử dụng <Content ...>và thêm <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>để làm cho Visual Studio sao chép tài nguyên khi xây dựng.
Markus Jarderot

8
Cố gắng sử dụng: <None>...</None>thay vì <Compile>...</Compile>. Nhưng tôi nghĩ, dù sao thì nó cũng sẽ sao chép những tập tin đó. Đã có VisualStudio thực hiện điều này với các tập tin được liên kết.
mo.

4
@mo. câu trả lời của bạn thêm các liên kết đến tất cả các tệp trong thư mục gốc của dự án, đôi khi nó không thuận tiện. % (RecursiveDir) nên đổi thành một số tên thư mục liên kết: ví dụ: liên kết thư mục nguồn từ dự án wp7 'MyMainProject' trong một dự án khác trong giải pháp này: <Itemgroup> <Compile Bao gồm = ".. \ .. \ MyMainProject \ MyMainProject \ engine *. * "> <Link> engine \% (Tên tệp) </ Link> </ Biên dịch> </ Itemgroup>
Tertium

23
Tôi đã phải sử dụng <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>để ngăn nó bỏ các phần mở rộng ra khỏi tên tệp.
Joe Daley

2
Đối với Tài nguyên Png Biểu tượng: <EmbeddedResource Bao gồm = ".. \ .. \ Biểu tượng \ 16 * .png">
ChrisB

126

Trong VS2012 trở lên, bạn có thể kéo thư mục sang dự án khác với phím alt được nhấn. Nó chỉ giống như thêm từng tệp dưới dạng liên kết thủ công nhưng nhanh hơn.

UPD : Xem xét sử dụng các dự án chia sẻ nếu bạn đang sử dụng VS2013 cập nhật 2 (với dự án chung Reference Manager ) hoặc VS2015.


1
Trong VS2010, làm điều này sẽ sao chép các tệp và thư mục thay vì thêm chúng dưới dạng liên kết, tạo các bản sao không mong muốn.
Tom

3
Lưu ý: thư mục phải được kéo từ windows explorer (không phải là một thể hiện khác của studio hình ảnh). Ngoài ra, nó phải là kéo chuột trái, không phải kéo chuột phải. Hoạt động tuyệt vời trong VS2012.
davidpricedev

11
Tôi nghĩ rằng nó chỉ tạo liên kết đến mọi tệp trong thư mục nguồn chứ không phải liên kết đến chính thư mục đó. Điều đó có nghĩa là nếu bạn thêm một tệp vào thư mục nguồn, nó sẽ không được liên kết tự động.
Johnny5

1
@MauryMarkowitz, bạn nên kéo một thư mục từ dự án VS, không phải từ windows explorer hoặc thứ gì khác.
mt_serg

1
@MauryMarkowitz, giải pháp duy nhất, hai dự án. Kéo thư mục1 từ Project1 đến Project2 với phím alt được nhấn. Mỗi tệp từ Project1 / Folder1 sẽ được thêm vào Project2 / Folder1 dưới dạng liên kết.
mt_serg

37

Một bổ sung cho câu trả lời từ mo. và nhận xét từ Marcus, nếu bạn đang liên kết các mục nội dung, bạn sẽ cần bao gồm phần mở rộng tệp:

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

cái này <Compile ...trong cái này Trong trường hợp của tôi, tôi cần phải giới thiệu .tscác tập tin cho dự án mới của tôi. nó được thực hiện như thế nào cảm ơn!
Rahmathullah M

23

Về phần truy vấn ban đầu có thư mục được liên kết xuất hiện trong IDE, có thể đạt được điều này để có một thư mục trong trình khám phá giải pháp với tất cả các tệp được liên kết bên trong, thay vì tất cả các tệp xuất hiện trong thư mục gốc của giải pháp. Để đạt được điều này bao gồm cả bổ sung:

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

Điều này sẽ bao gồm tất cả các tệp từ thư mục được liên kết trong một thư mục mới trong trình khám phá giải pháp được gọi là MyData. 'A' trong mã ở trên có thể được gọi là bất cứ thứ gì nhưng phải ở đó để thư mục xuất hiện.


nó dường như thực hiện thủ thuật nhưng không gấp các tệp Form thành một và gây ra lỗi cho các tệp .resx của họ (tôi đang sử dụng VB). Dẫu sao cũng xin cảm ơn.
Biệt thự Ivan Ferrer

1
@IvanFerrerVilla, vâng, nó có một số vấn đề tôi đã nhận thấy, nhưng đối với hầu hết các phần chỉ tốt cho ngoại hình.
Adam

3
Với Visual Studio 2015, điều này làm việc với tôi ngay cả khi không có `A`.
Martin

7

Nếu bạn muốn thêm một thư mục làm tài liệu tham khảo và bạn không muốn biên dịch nó, hãy sử dụng:

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

0

Phá vỡ vỏ và thêm một liên kết tượng trưng.

Quản trị viên runas sau đó

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

BAM liên kết tượng trưng!

/ d chỉ định liên kết thư mục.

Hoạt động trong Vista trên hết. Có thể được nhập vào XP.

Tài liệu ở đây: http://technet.microsoft.com/en-us/l Library / cc753194% 28WS.10% 29.aspx

Đối với những người không quen thuộc với các liên kết tượng trưng, ​​về cơ bản, nó là một con trỏ đến một tệp hoặc thư mục khác. Nó minh bạch cho các ứng dụng. Một bản sao trên đĩa, một số cách để giải quyết nó. Bạn cũng có thể tạo một "liên kết cứng" không phải là một con trỏ đến một địa chỉ khác, mà là một mục nhập ID tệp thực tế trong NTFS cho cùng một tệp.

LƯU Ý: như đã nêu trong các nhận xét, điều này sẽ chỉ hoạt động trên máy tính nơi bạn đã tạo liên kết tượng trưng và sẽ không hoạt động trong Hệ thống kiểm soát phiên bản như git.


2
Điều này sẽ chỉ hữu ích cho một nhà phát triển duy nhất (trừ khi có kịch bản). Các giải pháp khác là một phần của mã nguồn được chia sẻ vì vậy sẽ hữu dụng hơn.
JRoughan

Câu hỏi khi được hỏi không phải là về mã nguồn được chia sẻ. Điều đó nói rằng, msysgit không hỗ trợ symlink, vì vậy bummer.
John Vance

1
Đây không phải là một câu hỏi hệ thống tập tin. Ngoài ra, xin lưu ý rằng ý tưởng này sẽ gây ra tác dụng phụ nghiêm trọng với các hệ thống kiểm soát nguồn khác nhau và các hệ thống phục hồi dự phòng
g.pickardou

Rõ ràng tôi không được phép chỉnh sửa hoặc xóa câu hỏi của mình. Phản đối đầu tiên của bạn là ngớ ngẩn. Câu hỏi cũng không rõ ràng là một câu hỏi chỉnh sửa tập tin dự án, vì vậy bạn cũng nên đi xuống tất cả những câu trả lời. Phản đối thứ hai của bạn được ghi nhận, và nếu tôi có thể chỉnh sửa câu trả lời của mình để thêm lời cảnh báo đó, tôi sẽ làm thế.
John Vance
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.