Visual Studio: เส้นทางการอ้างอิงแอสเซมบลีสัมพัทธ์


98

เมื่อเพิ่มการอ้างอิงไปยังแอสเซมบลีที่อยู่ภายในไดเร็กทอรีโซลูชันมีวิธีใดบ้างที่จะเพิ่มค่อนข้างเพื่อให้เมื่อเช็คอินและออกจากที่เก็บข้อมูลจะถูกอ้างอิงในโปรเจ็กต์อย่างถูกต้อง


13
หากใช้งานไม่ได้จาก UI โปรดจำไว้ว่าคุณสามารถแก้ไขไฟล์. proj ด้วยมือได้โดยตรงและเปลี่ยนเส้นทางให้สัมพันธ์กัน เมื่อคุณเปลี่ยนวิธีใดวิธีหนึ่งแล้วก็ยังคงเป็นไปตามที่คุณวางไว้
Pavel Minaev

1
ในเส้นทางอ้างอิงของ Visual Studio 2010 จะถูกจัดเก็บเป็นญาติตามค่าเริ่มต้นดังนั้นหากสิ่งนี้เกิดขึ้นกับคุณอย่างอื่นไม่ถูกต้อง ในกรณีของฉันฉันไม่สนใจ dlls จากการควบคุมเวอร์ชันดังนั้นฉันจึงสามารถรวบรวมโซลูชันได้ แต่เพื่อนร่วมงานทำไม่ได้
Giles Roberts

คำตอบ:


126

หากต้องการขยายความคิดเห็นเดิมของ Pavel Minaev - GUI สำหรับ Visual Studio สนับสนุนการอ้างอิงแบบสัมพัทธ์โดยสมมติว่า. sln ของคุณเป็นรากของการอ้างอิงแบบสัมพัทธ์ ดังนั้นหากคุณมีวิธีแก้ไขC:\myProj\myProj.slnการอ้างอิงใด ๆ ที่คุณเพิ่มในโฟลเดอร์ย่อยC:\myProj\จะถูกเพิ่มโดยอัตโนมัติเป็นการอ้างอิงแบบสัมพัทธ์

ในการเพิ่มการอ้างอิงแบบสัมพันธ์ในไดเร็กทอรีแยกต่างหากเช่นให้C:/myReferences/myDLL.dllทำดังต่อไปนี้:

  1. เพิ่มการอ้างอิงใน Visual Studio GUI โดยคลิกขวาที่โปรเจ็กต์ใน Solution Explorer แล้วเลือกเพิ่มการอ้างอิง ...
  2. ค้นหา * .csproj ที่มีการอ้างอิงนี้และเปิดในโปรแกรมแก้ไขข้อความ
  3. แก้ไข <HintPath> ให้เท่ากับ

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

C:\myReferences\myDLL.dllตอนนี้การอ้างอิง

หวังว่านี่จะช่วยได้


21
ฉันเข้าใจว่านี่เป็นประโยชน์และถูกต้อง แต่ VS gui ไม่ได้ให้วิธีเพิ่มการอ้างอิงแบบสัมพัทธ์อย่างจริงจังหรือไม่?
kdbanman

4
ใน VS 2015 ฉันมีพฤติกรรมนี้โดยค่าเริ่มต้น (เส้นทางสัมพัทธ์)
Mugen

2
ฉันมั่นใจว่ามันได้เพิ่มเส้นทางที่แน่นอนจนฉันทำตามคำแนะนำของคุณด้วยความอยากรู้อยากเห็น VS แสดงเส้นทางสัมบูรณ์ในคุณสมบัติอ้างอิง แต่ <HintPath> แสดงว่าสัมพันธ์กันแล้ว ปรากฎว่าฉันไม่มีไฟล์ O_o lolimaderp!
donutguy640

@ donutguy640 นั่นทำให้ฉันสับสนเหมือนกัน นอกจากนี้ยังควรแสดงเส้นทางสัมพัทธ์ในบานหน้าต่างคุณสมบัติ
Alexander Derck

1
คุณไม่จำเป็นต้องแก้ไขไฟล์โครงการโดยตรง เลือก "เรียกดู" ในกล่องโต้ตอบเพิ่มการอ้างอิงนำทางไปยังโฟลเดอร์ที่มีไฟล์โครงการของคุณจากนั้นเพิ่มเส้นทางสัมพัทธ์ไปยัง DLL ของคุณ แม้ว่าพา ธ Absolut จะแสดงในหน้าต่างคุณสมบัติ แต่พา ธ สัมพัทธ์จะถูกบันทึกลงในไฟล์โปรเจ็กต์ VS ควรแสดงเส้นทางเช่นเดียวกับที่บันทึกไว้ในไฟล์โครงการ
needfulthing

9

ใช่เพียงสร้างไดเร็กทอรีในโซลูชันของคุณเช่น lib / จากนั้นเพิ่ม dll ของคุณไปยังไดเร็กทอรีนั้นในระบบไฟล์และเพิ่มในโปรเจ็กต์ (Add-> Existing Item-> ฯลฯ ) จากนั้นเพิ่มข้อมูลอ้างอิงตามโครงการของคุณ

ฉันทำสิ่งนี้หลายครั้งภายใต้ svn และภายใต้ cvs


5
คุณไม่จำเป็นต้องเพิ่ม dll ลงในโปรเจ็กต์เองเพียงแค่เพิ่มการอ้างอิงเข้าไป สิ่งที่ดีที่สุดที่ต้องทำคือเพิ่มไดเร็กทอรี 'lib' ทั้งหมดลงในคอนโทรลซอร์สของคุณ ดูcode.google.com/p/projectpilot/source/browse/#svn/trunkเป็นตัวอย่าง
Igor Brejc

1
คุณพูดถูก ฉันตรวจสอบโปรเจ็กต์เก่าและไม่มีการเพิ่มไดเร็กทอรีหรือ dlls ลงในโปรเจ็กต์เองเพียงแค่ไปยังที่เก็บ และการอ้างอิงจะสัมพันธ์กับโครงการ ขอโทษสำหรับเรื่องนั้น.
Freddy

4

ใน 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 จะใช้ pathes สัมพัทธ์เสมอ ครั้งเดียวที่ฉันต้องแก้ไขไฟล์โปรเจ็กต์ด้วยมือคือตอนที่ฉันต้องการแชร์ไฟล์สำคัญ (.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.