Visual Studio: Jalur Referensi Majelis Relatif

97

Saat menambahkan referensi ke sebuah assembly yang terletak di dalam direktori solusi, adakah cara untuk menambahkannya secara relatif, sehingga ketika check in dan out dari repositori itu direferensikan dalam proyek dengan benar?

theringostarrs
sumber
13
Jika tidak cukup berhasil dari UI, ingatlah bahwa Anda cukup mengedit file .proj secara langsung dan mengubah jalur menjadi relative. Setelah Anda mengubahnya dengan cara apa pun, itu tetap seperti yang Anda katakan.
Pavel Minaev
1
Di jalur referensi Visual Studio 2010 disimpan sebagai relatif secara default, jadi jika ini terjadi pada Anda ada sesuatu yang salah. Dalam kasus saya, itu adalah saya menyelimuti dll yang diabaikan dari kontrol versi sehingga saya dapat mengkompilasi solusi tetapi rekan kerja saya tidak bisa.
Giles Roberts

Jawaban:

125

Untuk memperluas komentar asli Pavel Minaev - GUI untuk Visual Studio mendukung referensi relatif dengan asumsi bahwa .sln Anda adalah root dari referensi relatif. Jadi, jika Anda memiliki solusi C:\myProj\myProj.sln, referensi apa pun yang Anda tambahkan di subfolder C:\myProj\otomatis ditambahkan sebagai referensi relatif.

Untuk menambahkan referensi relatif di direktori terpisah, seperti C:/myReferences/myDLL.dll, lakukan hal berikut:

  1. Tambahkan referensi di Visual Studio GUI dengan mengklik kanan proyek di Solution Explorer dan memilih Add Reference ...
  2. Temukan * .csproj di mana referensi ini berada dan buka di editor teks
  3. Edit <HintPath> menjadi sama dengan

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

Ini sekarang referensi C:\myReferences\myDLL.dll.

Semoga ini membantu.

CrimsonX
sumber
21
Saya memahami bahwa ini membantu dan benar, tetapi apakah VS gui benar - benar tidak menyediakan cara untuk menambahkan referensi relatif?
kdbanman
4
Di VS 2015 saya mendapatkan perilaku ini secara default (jalur relatif)
Mugen
2
Saya yakin bahwa itu telah menambahkan jalur absolut, sampai saya mengikuti arahan Anda karena penasaran. VS menunjukkan jalur absolut di properti referensi, tetapi <HintPath> ditampilkan sebagai sudah relatif. Ternyata saya kehilangan file O_o lolimaderp!
donutguy640
@ donutguy640 Itu membuat saya bingung juga. Mereka juga harus menunjukkan jalur relatif pada panel properti
Alexander Derck
1
Anda tidak perlu mengedit file proyek secara langsung. Pilih "telusuri" dalam dialog tambahkan referensi, navigasikan ke folder dengan file proyek Anda, lalu tambahkan jalur relatif ke DLL Anda. Meskipun jalur absolut ditampilkan di jendela properti, jalur relatif disimpan ke file proyek. VS benar-benar harus menampilkan jalur seperti yang disimpan dalam file proyek.
diperlukan
9

Ya, buat saja direktori dalam solusi Anda seperti lib /, lalu tambahkan dll Anda ke direktori itu di sistem file dan tambahkan ke dalam proyek (Add-> Existing Item-> etc). Kemudian tambahkan referensi berdasarkan proyek Anda.

Saya telah melakukan ini beberapa kali di bawah svn dan di bawah cvs.

Freddy
sumber
5
Anda tidak perlu menambahkan dll ke proyek itu sendiri, cukup tambahkan referensi ke sana. Hal terbaik yang harus dilakukan adalah menambahkan seluruh direktori 'lib' ke kontrol sumber Anda. Lihat code.google.com/p/projectpilot/source/browse/#svn/trunk sebagai contoh
Igor Brejc
1
Kamu benar. Saya memeriksa proyek lama dan baik direktori atau dll tidak ditambahkan ke proyek itu sendiri, hanya ke repositori. Dan referensi tersebut kemudian terkait dengan proyek. Maaf soal itu.
Freddy
3

Di VS 2017 otomatis. Jadi Add Referenceseperti biasanya.

Perhatikan bahwa di Reference Propertiesjalur absolut ditampilkan, tetapi .vbproj/.csprojrelatif digunakan.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
Iurii Vasylenko
sumber
2

Mungkin, cara termudah untuk mencapai hal ini adalah dengan menambahkan referensi ke assembly dan kemudian (secara manual) menambal representasi tekstual referensi dalam file proyek Visual Studio yang sesuai (ekstensi .csproj) sehingga menjadi relatif.

Saya telah melakukan ini berkali-kali di VS 2005 tanpa masalah.

Uwe Honekamp
sumber
3
Saya rasa tidak perlu mengubah file proyek secara manual. Dalam pengalaman saya, Visual Studio selalu menggunakan jalur relatif. Satu-satunya saat saya harus memodifikasi file proyek dengan tangan adalah ketika saya ingin membagikan file kunci (.snk). Visual Studio selalu hanya menyalin file kunci ke direktori proyek yang menghasilkan beberapa salinan file kunci.
Stefan Egli
1

Saya mungkin turun di sini, tetapi tampaknya jawabannya cukup jelas: Lihat jalur referensi di properti proyek. Dalam pengaturan kami, saya menambahkan folder repositori umum kami, ke jendela GUI jalur referensi, seperti itu

Jalur Referensi di VS20xx

Dengan cara itu saya dapat menyalin dll saya (siap untuk dipublikasikan) ke folder ini dan setiap pengembang sekarang mendapatkan DLL yang diperbarui setiap kali membangun dari folder ini.

Jika dll ditemukan dalam Solusi, pembuat harus memprioritaskan versi lokal daripada versi tim yang diterbitkan.

Kristen
sumber
Sayangnya ini disimpan di file csproj.user dan tidak relatif.
Jamie Kitson
0

Seperti yang disebutkan sebelumnya, Anda dapat mengedit .csprojfile proyek Anda secara manual untuk menerapkannya secara manual.

Saya juga memperhatikan bahwa Visual Studio 2013 mencoba menerapkan jalur relatif ke jalur petunjuk referensi, mungkin karena upaya untuk membuat file proyek lebih portabel.

Nick L.
sumber