ฉันจะกำหนดเส้นทางไปยังไฟล์ DLL ใน Visual Studio ได้อย่างไร


130

ฉันพัฒนาแอปพลิเคชันที่ขึ้นอยู่กับไฟล์ DLL เมื่อฉันดีบักแอปพลิเคชันของฉันแอปพลิเคชันจะบ่นว่า:

"โปรแกรมนี้ไม่สามารถเริ่มได้เนื่องจากไม่พบ xxx.dll"

ดังนั้นฉันต้องคัดลอกไฟล์ DLL ลงในไดเร็กทอรีเดียวกับไฟล์. vcproj ของฉัน

มีวิธีตั้งค่าโปรเจ็กต์เพื่อค้นหาไฟล์ DLL ใน (โดยเฉพาะอย่างยิ่ง) พา ธ สัมพัทธ์หรือ (ไม่ต้องการ) บางพา ธ สัมบูรณ์?

แนวคิดที่คล้ายกันกับวิธีที่เราตั้งค่ารวมและเส้นทางไลบรารีในการตั้งค่าโครงการ

ฉันหมายถึงเมื่อฉันดีบักแอปพลิเคชันของฉัน (กดปุ่มF5) ข้อผิดพลาดข้างต้นจะปรากฏขึ้น

คำตอบ:


196
  1. ไปที่คุณสมบัติโครงการ (Alt + F7)
  2. ภายใต้การแก้ไขจุดบกพร่องให้มองไปทางขวา
  3. มีฟิลด์สภาพแวดล้อม
  4. เพิ่มเส้นทางสัมพัทธ์ของคุณที่นั่น (สัมพันธ์กับโฟลเดอร์ vcproj) เช่น .. \ some-framework \ lib โดยการต่อท้ายPATH=%PATH%;$(ProjectDir)\some-framework\libหรือนำหน้าเส้นทางPATH=C:\some-framework\lib;%PATH%
  5. กด F5 (debug) อีกครั้งและควรใช้งานได้

15
ฟิลด์สภาพแวดล้อมรับคู่ NAME = VALUE ที่คั่นด้วยอัฒภาค ต่อท้ายตัวแปร PATH เพื่อให้ VS Debugger ค้นหาตำแหน่งเพิ่มเติมสำหรับ DLLs: PATH =% PATH%; $ (ProjectDir) lib
Brent Faust

1
มีวิธีคล้ายกันในการทำ Release build ด้วยหรือไม่?
Narek

ฉันต้องการเพิ่มเส้นทาง dll ไปยังตัวแปร $ (LibraryPath) (หรือรวมไว้ในรายการภายใต้ Library Directories ในการตั้งค่า Config Properties-> VC ++ Directories)
Foster Boondoggle

1
@ SlippD.Thompson ใช่คุณพูดถูก แต่คุณสามารถบรรลุสิ่งเดียวกันได้โดยใช้ Alt + p, p แทน
Jenix

1
@ SlippD ธ อมป์สันอ่าอ่านความคิดเห็นของคุณอีกครั้งฉันคิดว่าฉันเข้าใจผิดว่าคุณหมายถึงอะไร ใช่ฉันเห็นด้วย. แต่อย่างน้อยก็มีปุ่มลัดบางตัวที่ไม่เคยเปลี่ยนแปลงใน Visual Studio และ 'Alt + p, p' ก็เป็นหนึ่งในนั้น มันอยู่ที่นั่นพร้อมกับ 'Alt + F7' ซึ่งหมายความว่าตอนนี้เป็นอย่างอื่นอย่างที่คุณรู้ นอกจากนี้ 'Alt + p, p' หมายถึง 'เมนูโครงการ> * คุณสมบัติ'
Jenix

7

เส้นทางการค้นหาที่ตัวโหลดใช้เมื่อคุณเรียก LoadLibrary () สามารถเปลี่ยนแปลงได้โดยใช้ฟังก์ชันSetDllDirectory () ดังนั้นคุณสามารถเรียกสิ่งนี้และเพิ่มเส้นทางไปยังการพึ่งพาของคุณก่อนที่คุณจะโหลดได้

ดูเพิ่มเติมDLL ใบสั่งการค้นหา


7

ไปที่คุณสมบัติโครงการ -> เส้นทางอ้างอิง

จากนั้นเพิ่มโฟลเดอร์ด้วย DLL


4
โปรดอย่าโพสต์คำตอบที่เหมือนกันสำหรับคำถามหลายข้อ โพสต์คำตอบที่ดีหนึ่งคำตอบจากนั้นโหวต / ตั้งค่าสถานะเพื่อปิดคำถามอื่นที่ซ้ำกัน หากคำถามไม่ซ้ำกันให้ปรับแต่งคำตอบของคุณให้เหมาะกับคำถามนั้น
durron597

1
โดยคำตอบที่ดีที่สุด :)
Rathma

2
ดูเหมือนจะไม่มีใน Visual Studio 2015 ในโปรเจ็กต์ C ++ การรวมกันของเวอร์ชัน Visual Studio และประเภทโครงการใดที่สนับสนุนตัวเลือกนี้
Filip Bártek

คำถามของ OP เกี่ยวกับ C ++ แต่คำตอบนี้ใช้สำหรับ C #
Jenix

ไม่ได้ผลสำหรับฉันกับ C # และ VS2017
mherzog

4

ความเป็นไปได้อีกประการหนึ่งคือการตั้งค่าWorking Directoryภายใต้ตัวเลือกการดีบักเป็นไดเร็กทอรีที่มี DLL นั้น

แก้ไข: ฉันจะพูดถึงการใช้ไฟล์แบตช์เพื่อเริ่ม Visual Studio (และตั้งค่าตัวแปร PATH ในไฟล์แบตช์) จากนั้นจึงทำการค้นหาและพบว่าคำถามเดียวกันนี้ถูกถามเมื่อไม่นานมานี้ในโพสต์นี้ คำตอบแนะนำตัวเลือกไฟล์แบตช์รวมถึงการตั้งค่าโครงการที่เห็นได้ชัดว่าอาจทำงานได้ (ฉันไม่ได้ทดสอบ)


จะเกิดอะไรขึ้นถ้าฉันขึ้นอยู่กับ 2 dll แต่ละอันอยู่ในไดเร็กทอรีของตัวเอง (ฉันทำให้คำถามของฉันง่ายขึ้น)
sivabudh

ฉันไม่คิดว่าจะเป็นไปได้ที่จะทำให้โซลูชันนี้ใช้งานได้มากกว่าไดเร็กทอรีเดียว
Mark Wilkins

3

ในคุณสมบัติโครงการของคุณ (คลิกขวาที่โปรเจ็กต์คลิกที่ปุ่มคุณสมบัติ) ▶คุณสมบัติการกำหนดค่า▶สร้างกิจกรรม▶โพสต์กิจกรรมสร้าง▶บรรทัดคำสั่ง

แก้ไขและเพิ่มหนึ่งคำสั่งในบรรทัดคำสั่ง ตัวอย่างเช่นคัดลอก botan.dll จากเส้นทางต้นทางไปยังตำแหน่งที่กำลังเรียกใช้โปรแกรม

copy /Y "$(SolutionDir)ProjectDirs\x64\Botan\lib\botan.dll" "$(TargetDir)"

คุณสมบัติของโครงการ


ฉันไม่รู้ว่ามันถูกต้องหรือไม่ แต่ IDE ให้ตัวเลือกนั้นแก่ฉันและมันมีประโยชน์ฉันคิดว่ามันเป็นตัวเลือกที่ดีถ้าฉันต้องการคัดลอกไฟล์ที่จำเป็นทั้งหมดไปยังโฟลเดอร์อื่นเพื่อแจกจ่ายโปรแกรมของคุณ คาถาง่ายๆ แต่ได้ผล ในคำถามนี้มีคำตอบที่แตกต่างกันเพื่อไปสู่จุดจบเดียวกัน แต่ฉันใช้ตัวเลือกนี้และหลีกเลี่ยงอาการปวดหัวมากมาย
Joma

ตัวเลือกอื่น ๆ ไม่ได้ผลสำหรับฉันมีเพียงตัวเลือกนี้ แต่ดูเหมือนว่าตัวเลือกอื่น ๆ ควรจะเป็นวิธีที่ถูกต้อง
rjferguson

-1

ฉันรู้ว่าคำถามนี้ได้รับคำตอบเมื่อหลายปีก่อน แต่สำหรับผู้ที่ต้องการเปลี่ยนตำแหน่งที่ดีบักเกอร์เริ่มแอปพลิเคชันให้เปลี่ยนคุณสมบัติคำสั่งภายใต้คุณสมบัติโครงการ -> การดีบัก

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