Apa sebenarnya perbedaan antara file HintPath
dalam .csproj dan file ReferencePath
dalam .csproj.user
? Kami mencoba untuk berkomitmen pada konvensi di mana ketergantungan DLL berada dalam repo svn "rilis" dan semua proyek mengarah ke rilis tertentu. Karena pengembang yang berbeda memiliki struktur folder yang berbeda, referensi relatif tidak akan berfungsi, jadi kami membuat skema untuk menggunakan variabel lingkungan yang menunjuk ke folder rilis pengembang tertentu untuk membuat referensi absolut. Jadi setelah referensi ditambahkan, kami secara manual mengedit file proyek untuk mengubah referensi ke jalur absolut menggunakan variabel lingkungan.
Saya perhatikan bahwa ini dapat dilakukan dengan the HintPath
dan the ReferencePath
, tetapi satu-satunya perbedaan yang dapat saya temukan di antara keduanya adalah yang HintPath
diselesaikan pada waktu pembuatan dan ReferencePath
saat proyek dimuat ke dalam IDE. Saya tidak begitu yakin apa konsekuensi dari itu. Saya telah memperhatikan bahwa VS kadang-kadang menulis ulang .csproj.user
dan saya harus menulis ulang ReferencePath
, tetapi saya tidak yakin apa yang memicu itu.
Saya pernah mendengar bahwa yang terbaik adalah tidak memeriksa .csproj.user
file karena ini khusus pengguna, jadi saya ingin membidiknya, tapi saya juga mendengar bahwa HintPath
-specified DLL tidak "dijamin" untuk dimuat jika DLL yang sama misalnya terletak di direktori keluaran proyek. Ada pemikiran tentang ini?
sumber
Lihat di file Microsoft.Common.t target
Jawaban atas pertanyaan tersebut ada dalam file
Microsoft.Common.targets
untuk versi kerangka kerja target Anda.Untuk .Net Framework versi 4.0 (dan 4.5!) Elemen AssemblySearchPaths didefinisikan seperti ini:
Untuk .Net Framework 3.5 definisinya sama, tapi komentarnya salah. Definisi 2.0 sedikit berbeda, ia menggunakan $ (OutputPath) bukan $ (OutDir).
Di komputer saya, saya memiliki versi file Microsoft.Common.t Target berikut:
Ini dengan Visual Studio 2008, 2010 dan 2013 diinstal pada Windows 7.
Fakta bahwa direktori keluaran dicari bisa sedikit membuat frustasi (seperti yang ditunjukkan oleh poster asli) karena mungkin menyembunyikan HintPath yang salah. Solusinya membangun OK di mesin lokal Anda, tetapi rusak ketika Anda membangun di dalam struktur folder yang bersih (misalnya di mesin pembuat).
sumber
Pengalaman saya sendiri adalah yang terbaik adalah tetap berpegang pada salah satu dari dua jenis referensi perakitan:
Saya telah menemukan (seperti yang Anda jelaskan) metode lain yang terlalu mudah rusak atau memiliki persyaratan pemeliharaan yang mengganggu.
Perakitan apa pun yang saya tidak ingin GAC, harus tinggal di direktori eksekusi. Perakitan apa pun yang tidak atau tidak bisa berada di direktori eksekusi I GAC (dikelola oleh peristiwa build otomatis).
Ini tidak memberi saya masalah apa pun sejauh ini. Meskipun saya yakin ada situasi di mana ini tidak akan berhasil, jawaban yang biasa untuk masalah apa pun adalah "oh, GAC saja!". 8 D
Semoga membantu!
sumber
Meskipun ini adalah dokumen lama, tetapi ini membantu saya menyelesaikan masalah 'HintPath' yang diabaikan di komputer lain. Itu karena DLL yang direferensikan perlu berada dalam kontrol sumber juga:
https://msdn.microsoft.com/en-us/library/ee817675.aspx#tdlg_ch4_includeoutersystemassemblieswithprojects
Kutipan:
sumber