Kesalahan CS1705: "yang memiliki versi lebih tinggi daripada rakitan yang direferensikan"

109

Saya telah melihat ini sebentar sekarang dan belum menyelesaikannya. Saya mendapatkan pesan kesalahan berikut:

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral, 
PublicKeyToken=bfde95ba233094b2' uses 
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 
which has a higher version than referenced assembly
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2'

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll: 
(Location of symbol related to previous error)

Server web menjalankan Server 2003. Saya pergi ke c: \ windows \ assembly dan ternyata ada 3 versi Common.dll yang terdaftar. Versi tertinggi yang terdaftar adalah 3.3.4269.17112

Saya menyalin dll dengan versi: 3.3.4273.24368 ke dalam direktori assembly. Saya kemudian mengkompilasi ulang dan menerapkan kembali kode saya (mungkin berlebihan tapi oh well). Ketika saya membuka browser saya di sesi baru dan membuka URL situs lagi, saya masih mendapat pesan yang sama.

Saya dapat menggunakan windows explorer dan memverifikasi Common.dll berversi lebih tinggi sekarang terdaftar juga.

Apa lagi yang dapat saya pertimbangkan untuk mengatasi masalah ini? Saya tidak ingin mengubah referensi di assembly saya untuk menunjuk ke versi yang lebih lama.

jbizzle.dll
sumber
2
*.*Nomor versi gila . Bangun kembali semuanya, satu-satunya cara untuk memastikan.
Hans Passant

Jawaban:

68

Saya mengalami kesalahan ini karena "Rebuild" tidak benar-benar membangun kembali.

Solusi: Tutup Visual Studio, benar-benar buka dan hapus folder bin, lalu buat ulang, mungkin berfungsi lebih baik.

Juga, terkadang Visual Studio berbohong tentang referensi, jadi periksa HintPathdi .csprojfile Anda .

Nicolas Raoul
sumber
2
Yang ini menyelamatkan daging saya. Menjalankan lokal baik-baik saja, tetapi saya menerbitkan perubahan dan segalanya menjadi aneh. Menghapus konten folder bin online memaksa hal-hal untuk kembali sinkron. Terima kasih!
pStan
40

Jika Anda menggunakan NuGet, ada baiknya pergi ke 'Kelola Paket NuGet Untuk Solusi' , temukan paket yang menyebabkan masalah dan perbarui. Itu kemudian harus membawa semua paket ke versi terbaru dan menyelesaikan masalah.

Layak dicoba karena cepat dan mudah.

CountZero
sumber
2
Ini menyelesaikannya untuk saya, terima kasih. Situasi saya sedikit berbeda: Itu tidak terdaftar dalam pembaruan jadi saya harus menginstal dan ada jendela yang menunjukkan versi paket per proyek. Saya mengupgrade beberapa modul lama ke versi baru dari cms jadi saya harus pergi ke paket masalah, pilih mereka dan klik install. Bisa jadi karena cms baru saja diganti untuk menggunakan nuget tetapi Anda menghemat banyak csprojpengeditan yang membosankan !
rtpHarry
3
Pastikan untuk memperbarui paket NuGet di tingkat solusi, bukan di tingkat proyek.
Jess
2
Ini tentunya harus menjadi jawaban yang diterima dengan segala cara, saya tidak membaca ini tetapi mencoba solusi saya secara tidak sengaja, yang bekerja seperti pesona.
baymax
30

Masalah saya adalah bahwa saya memiliki 2 proyek yang mereferensikan 2 salinan berbeda dari dll yang sama yang memiliki versi berbeda. Saya memperbaikinya dengan menghapus keduanya dan memastikan mereka mereferensikan file dll yang sama.

Andrew Ngo
sumber
13

Salah satu kemungkinan penyebabnya adalah bahwa perakitan kedua dipasang di GAC sementara perakitan pertama, dengan nomor versi yang lebih tinggi, ditambahkan ke Referensi proyek. Untuk memverifikasi ini, klik dua kali rakitan dalam referensi proyek, dan periksa apakah ada rakitan lain dengan nama yang sama di penjelajah objek.

Jika demikian, gunakan utilitas gacutil.exe untuk menghapus instalasi kedua dari GAC. Misalnya, jika ini adalah rakitan 64-bit:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>
jgong
sumber
Dua tahun kemudian dan saran Anda bekerja dengan sangat baik. Melihat referensi di Object Browser mengurutkannya.
ceebreenk
3

Buka Referensi dan tambahkan referensi baru dari file dll Anda yang menyebabkan masalah dan pastikan bahwa semua dll Anda dikompilasi terhadap versi yang sama. Ini berhasil untuk saya, saya harap ini juga berhasil untuk Anda.

Rahul
sumber
2

Tim saya baru saja mengalami masalah ini dalam lingkungan build kami. Masalahnya disebabkan oleh perbedaan dalam elemen <HintPath> dari file .csproj.

Majelis umum kami memiliki jalur relatif yang benar ke direktori yang berisi rakitan referensi kami. Rakitan dependen memiliki jalur dari struktur direktori sebelumnya. Solusi berhasil dikompilasi pada mesin dev karena GAC ​​menyelesaikan referensi dependen ke versi yang benar yang diinstal di C: \ Program Files. Lingkungan build memiliki instalasi legacy dari perakitan (meskipun seharusnya tidak memilikinya) yang kembali ke sana dan dengan demikian terjadi kesalahan. Memperbarui <HintPath> di editor teks memperbaiki masalah.

Russell Speight
sumber
2

Masalahnya terlihat jika paket nuget bervariasi di beberapa proyek dalam solusinya.

Anda dapat memperbaiki ini dengan memperbarui paket nuget ke versi umum dengan semua PROYEK di SOLUSI

Krishna Prasad S
sumber
1

Punya masalah serupa. Masalah saya adalah bahwa saya memiliki beberapa proyek dalam solusi yang sama yang masing-masing mereferensikan versi tertentu dari DLL tetapi versi yang berbeda. Solusinya adalah menyetel 'Versi Spesifik' ke salah di semua properti dari semua referensi.

gnuchu
sumber
1

Saya tahu ini ditanyakan beberapa waktu yang lalu, setelah mencoba beberapa langkah di atas. Yang membantu saya adalah langkah-langkah berikut dan artikel ini .

Saya menemukan referensi dan mengubah PublicKeyToken dari yang direferensikan ke yang lebih lama.

Saya harap ini juga membantu.

Harry
sumber
1

Saya mengalami kesalahan yang sama. Saya memperbaiki kesalahan setelah menginstal Microsoft.AspNetCore.ALLke proyek uji.

Haktan Enes Biçer
sumber
0

Folder koleksi Handmade dll ini
Jika Anda solusi memiliki folder sampah untuk dll-file dari perpustakaan yang berbeda
lib, source, libs, dll
Anda bisa mendapatkan masalah ini jika Anda akan membuka solusi Anda (untuk waktu cemara) di Visual Studio. Dan folder pengumpulan dll Anda tidak terjawab karena entah bagaimana atau file dll konkret tidak terjawab.

Visual Studio akan mencoba secara diam-diam untuk mengganti referensi dll dengan sesuatu sendiri. Jika VS berhasil, maka referensi baru akan tersedia untuk solusi lokal Anda. Bukan untuk klon / pembayaran lain.

Yaitu Anda <HintPath>akan diabaikan dan file proyek Anda (.csproj) tidak akan diubah.
Sebagai teladan saya

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>

Ini DocumentFormat.OpenXmlakan direferensikan dari C:\Program Files (x86)\Open XML SDK\V2.5\libbukan dari solution\..\libfolder.

Solusi cepat

  • periksa dan pulihkan folder pengumpul dll Anda
  • dari Solution Explorer lakukan Unload Project , lalu Reload Project .

Solusi yang tepat adalah bermigrasi ke pengelola paket NuGet.

it3xl
sumber
0

untuk SharePoint, pastikan bahwa di bawah folder root Anda tidak memiliki folder "bin" dengan DLL Anda, jika demikian, hapus saja. (dan ubah "Salin Lokal" menjadi salah di VS).

bresleveloper
sumber
0

Referensi dalam proyek situs web disimpan dalam file web.config-nya. Perbarui referensi di sana untuk memperbaiki kesalahan.

Saya menghabiskan beberapa waktu melihat semua referensi dalam solusi saya sebelum menyadari bahwa saya telah lupa tentang referensi di file web.config.


sumber
0

Saya memiliki masalah yang sama dengan UnitTestingProject, di mana dalam MainProject saya menggunakan "System.Web.Mvc, Version = 3.0.0.0" dan di UnitTestingProject saya menggunakan "System.Web.Mvc, Version = 3.0.0.1"

Ubah yang berikut di <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll</HintPath> </Reference>

Buminda
sumber
0

Saya mendapatkan ini setelah menambahkan Episerver Find ke situs kami dan menginstal paket NuGet yang sesuai untuk Episerver Find.

Perbaikannya mudah: perbarui semua add-on yang terkait dengan Episerver juga (meskipun tampaknya tidak terkait: CMS, CMS.TinyMCE, CMS.UI, dll.)

Setelah memperbarui semua add-on Episerver yang mungkin dan mengkompilasi ulang, kesalahannya hilang.

webDevAndEverythingElse
sumber
0

Dalam skenario saya, saya mengedit file .csproj untuk aplikasi dotnetCore saya. Saya perhatikan bahwa tag TargetFramework memiliki nilai netcoreapp2.1 dan tag RuntimeFrameworkVersion nilai 2.0.0 . Jadi saya mengubah RuntimeFrameworkVersion menjadi 2.1.0 , menyimpan, memulai ulang VS, dan membangun kembali dan kemudian menyelesaikan kesalahan.

Semoga ini bisa membantu Anda ...

Semoga berhasil,

Sugeshan

Sugeshan Govindsamy
sumber
-1

Dalam proyek Anda, temukan referensi System.Web.Mvc, periksa versinya.

Setelah itu klik kanan referensi -> assemblies dan cari system.web.mvc dan setup itu.

Masalahnya menyebabkan versi berbeda dari majelis ini .

Edit: Dari pada pilih kelola paket NuGet dan instal pembaruan (jika Anda memiliki banyak proyek, instal pembaruan juga.)

Pembaruan penting adalah Microsoft.AspNet.Mvc dan Microsoft.Net.Compilers jangan lupa!

Hadnazzar
sumber
-1

Dalam tim kami, kami mengerjakan komputer yang berbeda dengan git. Seseorang memperbarui dlldan saya tidak memilikinya. Saya baru saja memperbarui referensi dependensi saya dan masalah terpecahkan.

Masoud Darvishian
sumber
-3

Saya mengalami masalah serupa, saya telah membuat DLL, yaitu A.dll, yang mereferensikan DLL lain, yaitu B.dll.

Saya membuat aplikasi C.exe dan mereferensikan DLL A.dll dan B.dll.

Solusi - Saat menghapus referensi B.dll dari c.exe saya dapat memperbaiki masalah.

Semoga ini membantu.

Yahya
sumber