“ เพิ่มเป็นลิงก์” สำหรับโฟลเดอร์ในโครงการ Visual Studio


128

ใน Visual Studio เราสามารถ "เพิ่มเป็นลิงก์" เพื่อเพิ่มลิงก์ไปยังไฟล์ในโครงการอื่นในโซลูชัน

มีวิธีใดในการทำเช่นนี้กับทั้งโฟลเดอร์เพื่อให้ทั้งโฟลเดอร์ในโครงการ A ปรากฏในโครงการ B โดยไม่จำเป็นต้องเชื่อมโยงไปยังรายการใหม่ในโฟลเดอร์นั้นด้วยตนเอง

คำตอบ:


142

ตามที่บล็อกโพสต์นี้ระบุไว้เป็นไปได้

<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 ก็ทำเช่นนี้กับไฟล์ที่เชื่อมโยง
เดือน

4
@mo คำตอบของคุณเพิ่มลิงก์ไปยังไฟล์ทั้งหมดในรูทโปรเจ็กต์บางครั้งก็ไม่สะดวก % (RecursiveDir) ควรเปลี่ยนเป็นชื่อโฟลเดอร์ลิงก์ตัวอย่างเช่นลิงก์โฟลเดอร์ต้นทางจากโครงการ wp7 'MyMainProject' ในโปรเจ็กต์อื่นในโซลูชันนี้: <ItemGroup> <Compile Include = ".. \ .. \ MyMainProject \ MyMainProject \ engine . * * * * * * * * "> <ลิงก์> เครื่องยนต์ \ (ชื่อไฟล์) <Link /> </ คอมไพล์> </ ItemGroup>%
Tertium

24
ฉันต้องใช้<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>เพื่อป้องกันไม่ให้มันทิ้งนามสกุลออกจากชื่อไฟล์
Joe Daley

2
สำหรับทรัพยากร Icon Png: <EmbeddedResource Include = ".. \ .. \ Icons \ 16 * .png">
ChrisB

126

ใน VS2012 และใหม่กว่าคุณสามารถลากโฟลเดอร์ไปยังโปรเจ็กต์อื่นโดยกดปุ่มalt เหมือนกับการเพิ่มแต่ละไฟล์เป็นลิงก์ด้วยตนเอง แต่เร็วกว่า

การอัปเดต: พิจารณาใช้โปรเจ็กต์ที่แชร์หากคุณใช้ VS2013 อัพเดต 2 (ด้วยShared Project Reference Manager ) หรือ VS2015


1
ใน VS2010 การทำเช่นนี้จะเป็นการคัดลอกไฟล์และไดเร็กทอรีแทนที่จะเพิ่มเป็นลิงค์สร้างรายการซ้ำที่ไม่ต้องการ
ทอม

3
หมายเหตุ: ต้องลากโฟลเดอร์จาก windows explorer (ไม่ใช่อินสแตนซ์อื่นของ visual studio) นอกจากนี้ต้องเป็นการลากคลิกซ้ายไม่ใช่ลากคลิกขวา ใช้งานได้ดีใน VS2012
davidpricedev

11
ฉันคิดว่ามันแค่สร้างลิงก์ไปยังทุกไฟล์ในโฟลเดอร์ซอร์สไม่ใช่ลิงก์ไปยังโฟลเดอร์นั้นเอง นั่นหมายความว่าหากคุณเพิ่มไฟล์ลงในโฟลเดอร์ต้นทางไฟล์นั้นจะไม่ถูกเชื่อมโยงโดยอัตโนมัติ
Johnny5

1
@MauryMarkowitz คุณควรลากโฟลเดอร์จากโครงการ VS ไม่ใช่จาก windows explorer หรืออย่างอื่น
mt_serg

1
@MauryMarkowitz โซลูชันเดียวสองโครงการ ลาก Folder1 จาก Project1 ไปยัง Project2 โดยกดปุ่ม alt แต่ละไฟล์จาก Project1 / Folder1 จะถูกเพิ่มไปยัง Project2 / Folder1 ตามลิงค์
mt_serg

37

อีกหนึ่งคำตอบจากโม และความคิดเห็นจาก 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 Administrator แล้ว

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

ลิงค์สัญลักษณ์ BAM!

/ d ระบุลิงค์ไดเร็กทอรี

ทำงานใน Vista ได้ทันที สามารถแบ็คพอร์ตไปยัง XP

เอกสารประกอบที่นี่: http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx

สำหรับผู้ที่ไม่คุ้นเคยกับลิงก์สัญลักษณ์โดยพื้นฐานแล้วจะเป็นตัวชี้ไปยังไฟล์หรือไดเรกทอรีอื่น มันโปร่งใสสำหรับแอปพลิเคชัน หนึ่งสำเนาบนดิสก์หลายวิธีในการจัดการกับมัน คุณยังสามารถสร้าง "ฮาร์ดลิงก์" ซึ่งไม่ใช่ตัวชี้ไปยังที่อยู่อื่น แต่เป็นรายการ ID ไฟล์จริงใน NTFS สำหรับไฟล์เดียวกัน

หมายเหตุ: ตามที่ระบุไว้ในความคิดเห็นสิ่งนี้จะใช้ได้เฉพาะบนคอมพิวเตอร์ที่คุณสร้าง symlink และจะไม่ทำงานในระบบควบคุมเวอร์ชันเช่น git


2
สิ่งนี้จะเป็นประโยชน์สำหรับนักพัฒนาคนเดียวเท่านั้น (เว้นแต่จะมีสคริปต์) โซลูชันอื่น ๆ เป็นส่วนหนึ่งของซอร์สโค้ดที่แชร์จึงมีประโยชน์ในระดับสากลมากขึ้น
JRoughan

คำถามที่ถามไม่เกี่ยวกับซอร์สโค้ดที่แชร์ ที่กล่าวว่า msysgit ไม่รองรับ symlink ดังนั้นคนเกียจคร้าน
John Vance

1
นี่ไม่ใช่คำถามเกี่ยวกับระบบไฟล์ นอกจากนี้โปรดทราบว่าแนวคิดนี้จะทำให้เกิดผลข้างเคียงที่ร้ายแรงกับระบบควบคุมแหล่งที่มาที่แตกต่างกันและระบบสำรองข้อมูลสำรอง
g.pickardou

เห็นได้ชัดว่าฉันไม่ได้รับอนุญาตให้แก้ไขหรือลบคำถามของฉัน การคัดค้านครั้งแรกของคุณเป็นเรื่องงี่เง่า คำถามนี้ไม่ใช่คำถามเกี่ยวกับการแก้ไขไฟล์โครงการอย่างชัดเจนดังนั้นคุณควรลงคะแนนคำตอบเหล่านั้นทั้งหมดด้วย การคัดค้านครั้งที่สองของคุณได้รับการบันทึกไว้และหากฉันสามารถแก้ไขคำตอบเพื่อเพิ่มข้อแม้นั้นได้ฉันก็จะทำ
John Vance
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.