Saya baru saja menyalin proyek yang ada ke mesin baru untuk mulai mengembangkannya dan mengalami masalah dengan versi salah satu rakitan yang saya referensikan (DLL telerik saat itu terjadi).
Proyek awalnya mereferensikan versi perakitan yang lebih lama (sebut saja v1.0.0.0). Mesin baru saya memiliki versi perakitan terbaru yang diinstal, jadi saya pikir saya akan memperbaruinya (sebut saja versi baru v2.0.0.0).
Sekarang inilah masalahnya: Jika saya menyalin dll v1.0.0.0 lama ke folder proyek dan menambahkannya sebagai referensi, situs web diluncurkan tanpa masalah. Jika saya menghapus referensi itu (dan juga menghapus DLL lama dari sistem saya) dan menambahkan versi baru (v2.0.0.0), halaman menunjukkan pengecualian berikut:
Tidak dapat memuat file atau rakitan 'XXXXXX, Versi = 1.0.0.0, Budaya = netral, PublicKeyToken = 121fae78165ba3d4' atau salah satu dari ketergantungannya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan. (Pengecualian dari HRESULT: 0x80131040)
Jelas, kodenya mencari versi yang ketinggalan zaman dan tidak dapat menemukannya. Tapi kenapa?
Saya menerima folder solusi untuk nomor versi itu dan tidak dapat menemukan satu referensi pun. Saya memeriksa teks dari file .csproj dan menemukan versi yang benar menunjukkan versi terbaru dan HintPath dengan benar menunjukkan jalan ke DLL baru. Selain itu, karena saya tidak menginstal DLL lama pada sistem, itu tidak muncul di GAC saya (meskipun v2.0.0.0 tidak, seperti yang diharapkan).
Saya kemudian mengaktifkan fusion log viewer untuk mencoba mencari tahu mengapa ia mencari versi lama itu, tetapi tidak berhasil:
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.
=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
Semua itu mengatakan bahwa itu dimulai dengan mencari majelis lama itu. Saya telah mencoba untuk menemukan solusi online dan melihat pertanyaan SO yang serupa ini , tetapi tampaknya kebalikan dari masalah saya. Program kuesioner itu menemukan DLL yang salah, bukan yang direferensikan. Sedangkan masalah saya adalah bahwa program ini secara misterius mencari DLL yang salah dan tidak dapat menemukannya ketika yang tepat dapat ditemukan secara lokal di folder bin dan di GAC.
Mengapa saya mencari versi lama? Di mana lagi saya dapat mencari untuk menemukan referensi yang buruk ini?
<dependentAssembly>
entri yang ada menyebabkan masalah.Saya dengan Chris Conway untuk yang satu ini (dibesarkan dia). Masalahnya adalah bahwa Anda mereferensikan salah satu majelis telerik dalam proyek Anda yang mereferensikan yang lain yang tidak ada.
Hal pertama: Saya tidak akan menginstal vendor APAPUN (yaitu: telerik) ke GAC. Barang-barang Telerik dikompilasi menjadi hanya dua rakitan (telerik.web.design dan telerik.web.ui). Cukup gunakan mereka yang memiliki aplikasi.
Kedua, dalam setiap file .proj Anda (seperti .csproj) akan ada
<reference include..>
yang menunjuk ke file Telerik.Web.UI. Ini biasanya berisi nomor versi. Pastikan rakitan yang Anda masukkan ke folder bin cocok dengan versi itu.Ketiga, pastikan SEMUA proyek Anda menggunakan perakitan terbaru. Juga pastikan mereka meraih perakitan dari jalur lokal, bukan GAC. (Saya benar-benar tidak suka GAC. Ini telah menyebabkan tidak ada habisnya masalah pada beberapa proyek saya sudah di). Kami biasanya memiliki folder "Sidang" yang digunakan semua proyek untuk referensi perakitan eksternal.
Keempat, visual studio secara otomatis mencari gac Anda setiap kali proyek situs web dimuat dan menargetkan ulang lokasi perakitan jika menemukan sesuatu di gac. Saya tidak ingat apakah pernah melakukan ini untuk proyek aplikasi web, tetapi saya tidak memiliki masalah dalam waktu yang lama dengan itu. Ini dapat menyebabkan masalah serupa selama penyebaran.
Kelima, Anda dapat mengubah nomor versi untuk majelis di web.config. Pada
runtime/assemblybinding
bagian ini Anda dapat menggunakan sesuatu seperti berikut ini yang membawa setiap perakitan telerik digunakan pada tahun 2008 ke depan dan mengarahkannya ke versi yang sangat khusus:sumber
Saya mencoba sebagian besar jawaban tetapi tetap tidak berhasil. Ini bekerja untuk saya:
klik kanan pada referensi -> properti -> ubah 'Versi Khusus' menjadi false.
Semoga ini membantu.
sumber
Mencoba:
C:\Users\USERNAME\.nuget\packages\
Itu berhasil bagi saya.
sumber
bekerja untukku.
sumber
Ini bukan jawaban yang jelas mengapa, tetapi kami memiliki masalah ini, inilah keadaan kami dan apa yang menyelesaikannya:
Dev 1:
Solusi berisi Project A yang mereferensikan Paket NuGet, dan proyek referensi MVC Proyek A. Diaktifkan Pemulihan Paket NuGet, kemudian memperbarui paket NuGet. Mendapat kesalahan runtime yang mengeluh lib NuGet tidak dapat ditemukan - tetapi kesalahannya adalah mencari versi yang lebih lama dan tidak diperbarui. Solusi (dan ini konyol): Tetapkan breakpoint pada baris pertama kode dalam proyek MVC yang memanggil Proyek A. Selangkah dengan F11. Dipecahkan - tidak pernah punya masalah lagi.
Dev 2:
Solusi dan proyek yang sama, tetapi set breakpoint sihir dan langkah dalam solusi tidak bekerja. Mencari di mana-mana untuk pengalihan versi atau referensi buruk lainnya untuk paket Nuget ini, menghapus paket dan menginstalnya kembali, menghapus bin, obj, Asp.Net Temp, tidak ada yang menyelesaikannya. Akhirnya, berganti nama menjadi Proyek A, menjalankan proyek MVC - diperbaiki. Mengganti nama itu kembali ke nama aslinya, tetap diperbaiki.
Saya tidak punya penjelasan mengapa itu berhasil, tapi itu membuat kami keluar dari kesulitan besar.
sumber
Apakah Anda memiliki proyek lain dalam solusi itu? (Mungkin proyek lain merujuk versi lama) Biasanya dalam VS, dll ketergantungan mencakup semua proyek dalam solusi.
sumber
Masalah saya adalah bahwa majelis lama berada di folder _bin_deployableAssemblies di bawah Aplikasi Web. Ini berarti majelis lama menimpa majelis GAC ketika membangun proyek.
sumber
Dalam hal ini menyelamatkan orang lain 3 jam ... kasus saya agak berbeda. Kode saya menggunakan DevExpress v11.1 v11.1.4.0. Saya telah merujuk semuanya dengan benar dalam kode saya. Tapi .net memory profiler menginstal DevExpress v11.1 v11.1.12.0 di GAC. Sebenarnya bukan komponen yang saya rujuk tetapi yang mereka rujuk secara internal yang gagal. Cobalah sekuat tenaga, GAC selalu diperiksa terlebih dahulu. Itu dikompilasi dan berjalan dengan baik tetapi saya tidak bisa melihat perancang bentuk menang dan jejak tumpukan tidak membantu sama sekali. Akhirnya dihapus profil memori .net dan semua dikembalikan.
sumber
Saya memiliki masalah serupa dan saya harus menghapus semuanya dari folder bin dan obj dan membangun kembali untuk menyelesaikan masalah saya. Semoga ini membantu.
sumber
Jika Anda mengalami masalah ini saat menguji dan / atau men-debug aplikasi dari lingkungan Visual Studio (ASP.NET Development Server), perlu untuk menghapus semua file sementara di folder situs web pengembangan. Untuk mengetahui di mana folder itu berada, cari ikon ASP.NET Development Server pada ikon baki Windows (seharusnya memiliki judul seperti ini: ASP.NET Development Server - Port ####), klik kanan ikon dan pilih Show Detail; Lalu, bidang jalan fisik akan memberi tahu Anda apa folder sementara itu, semua item di sana harus dihapus untuk menyelesaikan masalah. Bangun dan jalankan kembali situs web dan masalahnya harus diselesaikan (sekali lagi, dipecahkan untuk Lingkungan Pengembangan).
sumber
Saya memiliki masalah yang sama dengan majelis berbeda yang merujuk pada versi berbeda dari Newtonsoft.json. Solusi yang berhasil bagi saya adalah menjalankan pembaruan-paket dari Nuget Package Manager Console.
sumber
Kesalahan ini agak menyesatkan - saya memuat beberapa DLL yang membutuhkan arsitektur x64 untuk ditentukan. Dalam
.csproj
file:Yang hilang
PlatformTarget
menyebabkan kesalahan ini.sumber
Saya mendapatkan:
Itu karena saya mengubah nama majelis dari
XXX.dll
menjadiXXX-new-3.3.0.0.dll
. Mengembalikan nama ke aslinya memperbaiki kesalahan.sumber
Ini hampir seperti Anda harus menghapus komputer Anda untuk menyingkirkan dll lama. Saya sudah mencoba semuanya di atas dan kemudian saya melangkah lebih jauh dengan menghapus setiap contoh file .DLL yang ada di komputer saya dan menghapus setiap referensi dari aplikasi. Namun, itu masih mengkompilasi dengan baik dan ketika berjalan itu mereferensikan fungsi dll dengan baik. Saya mulai bertanya-tanya apakah itu merujuknya dari drive jaringan di suatu tempat.
sumber
Saya memiliki pesan yang sama ketika beralih di antara dua versi aplikasi yang mereferensikan versi berbeda dari DLL yang sama. Meskipun saya menguji di folder yang berbeda, saya tidak sengaja menyalin versi yang lebih baru dari versi yang lebih lama.
Jadi, hal pertama yang harus diperiksa adalah versi DLL yang direferensikan di folder aplikasi. Untuk berjaga-jaga.
sumber
Mungkin ini membantu atau mungkin tidak. Saya membersihkan versi debug dan rilis saya lalu mengganti nama folder OBJ. Ini akhirnya membuatku berpikir. Langkah-langkah sebelumnya pada dasarnya proyek menghapus referensi dan menambahkannya kembali di properti proyek.
sumber
Di My Visual Studio 2015, saya memastikan bahwa Daftar Jalur Referensi Proyek Visual Studio yang kosong kosong:
sumber
Inilah yang bekerja untuk saya:
Saya menggunakan
Microsoft.IdentityModel.Clients.ActiveDirectory
versi 3.19 dalam proyek perpustakaan kelas tetapi hanya memiliki versi 2.22 diinstal dalam proyek Aplikasi Web ASP.NET yang sebenarnya. Memutakhirkan ke 3,19 di proyek aplikasi web membuat saya melewati kesalahan.sumber
Dalam kasus saya, saya memiliki 3 proyek, 1 proyek utama dan 2 sub proyek yang dirujuk oleh proyek utama .. Jadi saya memperbarui proyek utama, meninggalkan sub proyek. Di situlah konflik itu. Setelah saya perbarui semua proyek saya semuanya bekerja dengan baik.
sumber
Dalam VS2017, telah mencoba semua solusi di atas tetapi tidak ada yang berhasil. Kami menggunakan Azure devops untuk versi.
Pilih proyek yang membuat Anda gila untuk waktu yang lama
Klik kanan cabang atau solusi> Lanjutan> dapatkan versi tertentu
sumber
Dalam kasus saya, saya tidak sengaja memilih versi yang salah dari paket Telerik dari nuget, yang kemudian diganti nuget setiap paket yang saya rujuk dengan versi yang salah. Kemudian dimasukkan redirect yang mengikat ke versi yang salah sehingga bahkan setelah saya mengganti semuanya dengan versi yang benar, masih mencari versi yang salah.
sumber