Visual Studio'da bir DLL dosyasının yolunu nasıl ayarlayabilirim?


130

Bir DLL dosyasına bağlı olan bir uygulama geliştirdim. Ne zaman hata ayıklama Başvurumu, applicationwould şikayet:

"Xxx.dll bulunamadığı için bu uygulama başlatılamadı."

Bu yüzden DLL dosyasını .vcproj dosyamla aynı dizine kopyalamam gerekiyor.

Projeyi DLL dosyasını (tercihen) bir göreceli yol veya (tercih edilmez) mutlak bir yolda aramaya ayarlamanın bir yolu var mı?

Proje ayarlarında dahil etme ve kitaplık yolunu nasıl ayarladığımıza benzer konsept.

Demek istediğim, uygulamamda hata ayıkladığımda (isabet ettiğimde F5) yukarıdaki hata ortaya çıkıyor.

Yanıtlar:


196
  1. Proje özelliklerine gidin (Alt + F7)
  2. Hata Ayıklama altında, sağa bakın
  3. Bir Çevre alanı var.
  4. Göreceli yolunuzu buraya ekleyin (vcproj klasörüne göre) yani .. \ some-framework \ lib PATH=%PATH%;$(ProjectDir)\some-framework\lib, yolun başına veya sonuna ekleyerekPATH=C:\some-framework\lib;%PATH%
  5. F5'e (hata ayıklama) tekrar basın ve çalışmalıdır.

15
Ortam alanı, NAME = VALUE noktalı virgülle ayrılmış çiftleri alır. VS Hata Ayıklayıcısının DLL'ler için ek konumlar aramasını sağlamak için PATH değişkenine ekleyin: PATH =% PATH%; $ (ProjectDir) lib
Brent Faust

1
Sürüm derlemesi için de yapmanın benzer bir yolu var mı?
Narek

$ (LibraryPath) değişkenine dll yolunu eklemem gerekiyordu (veya bunu Config Properties-> VC ++ Dizinler ayarındaki Kitaplık Dizinleri altındaki listeye dahil etmem gerekiyordu).
Foster Boondoggle

1
@ SlippD.Thompson Evet, haklısın. Ancak aynı şeyi Alt + p, p kullanarak da elde edebilirsiniz.
Jenix

1
@ SlippD.Thompson Ah, yorumunuzu tekrar okurken, ne demek istediğini yanlış anladım. Evet katılıyorum. Ama en azından, Visual Studio'da hiç değişmeyen bazı kısayol tuşları var ve 'Alt + p, p' bunlardan biri. "Alt + F7" ile birlikte oradaydı, bu artık bildiğiniz gibi başka bir anlama geliyor. Ayrıca, 'Alt + p, p' yalnızca 'Proje menüsü> * Özellikler' anlamına gelir.
Jenix

7

LoadLibrary () öğesini çağırdığınızda yükleyicinin kullandığı arama yolu, SetDllDirectory () kullanılarak değiştirilebilir. işlevi . Yani bunu çağırabilir ve yüklemeden önce bağımlılığınızın yolunu ekleyebilirsiniz.

Ayrıca DLL Arama Sırasına bakın .


7

Proje özelliklerini gözden geçirin -> Referans Yolları

Ardından DLL'leri içeren klasör ekleyin


4
Lütfen birden fazla soruya aynı cevapları göndermeyin. İyi bir yanıt verin, ardından diğer soruları kopya olarak kapatmak için oylayın / işaretleyin. Soru yinelenen bir soru değilse , yanıtlarınızı soruya uyarlayın.
durron597

1
açık ara en iyi cevap :)
Rathma

2
Bu, bir C ++ projesinde Visual Studio 2015'te mevcut görünmüyor. Visual Studio sürümü ve proje türünün hangi birleşimi bu seçeneği destekler?
Filip Bártek

OP'nin sorusu C ++ ile ilgiliydi ama bu cevap C # için.
Jenix

C # ve VS2017 ile benim için işe yaramadı
mherzog

4

Başka bir olasılık da Working Directory, hata ayıklama seçeneklerini bu DLL'ye sahip dizin olacak şekilde ayarlamak olabilir.

Düzenleme: Visual Studio'yu başlatmak için bir toplu iş dosyası kullanmaktan bahsedecektim (ve toplu iş dosyasında PATH değişkenini ayarlayın). Sonra biraz araştırma yaptım ve aynı sorunun bu yazıda çok uzun zaman önce sorulmadığını görün . Cevap, toplu iş dosyası seçeneğini ve aynı zamanda işi yapabilecek gibi görünen proje ayarlarını önermektedir (test etmedim).


Ya 2 dll'ye bağlıysam, her biri kendi dizininde yaşıyor? (yukarıdaki sorumu basitleştirdim)
sivabudh

Bu çözümü tek bir dizinden daha fazlası için çalıştırmanın mümkün olacağını sanmıyorum.
Mark Wilkins

3

Proje özelliklerinizde (Projeye sağ tıklayın, özellik düğmesine tıklayın) ▶ Yapılandırma Özellikleri ▶ Olay Oluşturma ▶ Oluşturma Sonrası Olaylar ▶ Komut Satırı.

Komut satırına bir talimat düzenleyin ve ekleyin. örneğin botan.dll dosyasını kaynak yolundan programın yürütüldüğü konuma kopyalayın.

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

Proje Özellikleri


Bunu yapmanın doğru olup olmadığı hakkında hiçbir fikrim yok, ancak IDE bana bu seçeneği veriyor ve faydalı oldu, programınızı dağıtmak için gerekli tüm dosyaları başka bir klasöre kopyalamak istiyorsam bunun iyi bir seçenek olduğunu düşünüyorum. Basit büyü ama etkili. İşte bu soruda aynı sonuca ulaşmak için farklı cevaplar var. Ama bu seçeneği kullanıyorum ve birçok baş ağrısından kaçınıyorum.
Joma

Diğer seçenekler benim için işe yaramadı, sadece bu, ama görünüşe göre diğerleri doğru yol olmalı.
rjferguson

-1

Bu sorunun yıllar önce yanıtlandığını biliyorum, ancak benim gibi hata ayıklayıcının uygulamayı başlattığı yeri değiştirmesi gerekenler için, Proje Özellikleri -> Hata Ayıklama altındaki komut özelliğini değiştirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.