Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan


751

Saya mencoba menjalankan beberapa tes unit dalam aplikasi C # Windows Forms (Visual Studio 2005), dan saya mendapatkan kesalahan berikut:

System.IO.FileLoadException: Tidak dapat memuat Utilitas file atau rakitan, Versi = 1.2.0.200, Budaya = netral, PublicKeyToken = 764d581291d764f7 'atau salah satu dari ketergantungannya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan. (Pengecualian dari HRESULT: 0x80131040) **

di x.Foo.FooGO ()

di x.Foo.Foo2 (String groupName_) di Foo.cs: baris 123

di x.Foo.UnitTests.FooTests.TestFoo () di FooTests.cs: baris 98 **

System.IO.FileLoadException: Tidak dapat memuat Utilitas file atau rakitan, Versi = 1.2.0.203, Budaya = netral, PublicKeyToken = 764d581291d764f7 'atau salah satu dari ketergantungannya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan. (Pengecualian dari HRESULT: 0x80131040)

Saya melihat referensi saya, dan saya hanya punya referensi Utility version 1.2.0.203(yang lain sudah tua).

Adakah saran tentang bagaimana saya mencari tahu apa yang mencoba merujuk versi lama dari file DLL ini?

Selain itu, saya tidak berpikir saya memiliki perakitan lama ini di hard drive saya. Apakah ada alat untuk mencari rakitan versi lama ini?


Dalam kasus saya, ini terjadi karena saya memiliki dua proyek memuat DLL yang sama dengan versi yang berbeda. (Semoga ini bisa membantu seseorang!)
miguelmpn

Jawaban:


461

Loader .NET Assembly:

  • tidak dapat menemukan 1.2.0.203
  • tetapi menemukan 1.2.0.200

Majelis ini tidak cocok dengan yang diminta dan karena itu Anda mendapatkan kesalahan ini.

Dengan kata sederhana, itu tidak dapat menemukan kumpulan yang direferensikan. Pastikan ia dapat menemukan perakitan yang tepat dengan meletakkannya di GAC atau di jalur aplikasi. Juga lihat https://docs.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-reference .


19
tetapi ketika saya melihat referensi proyek, ini menunjuk ke 1.2.0.203 ... sepertinya tidak ada yang menunjuk ke 1.2.0.200 lagi
leora

128
Tepat - ia mencari 1.2.0.203, tetapi ditemukan 1.2.0.200. Cari tahu di mana file itu dan gantikan dengan versi yang tepat.
Jon Skeet

18
Saya mengajukan pertanyaan serupa di sini dan mendapat solusi yang berfungsi: stackoverflow.com/questions/4187907/…
Michael La Voie

13
Periksa versi referensi, dan kemudian lihat apakah itu sama dalam
paket.config

4
Pesan ini membingungkan saya setiap saat. Tampaknya ditulis mundur. Saya berharap untuk mengeluh tentang versi yang Anda minta untuk memuat, bukan versi yang ditemukannya. Senang saya bukan satu-satunya yang salah!
Greg Woods

91

Anda dapat melakukan beberapa hal untuk memecahkan masalah ini. Pertama, gunakan pencarian file Windows untuk mencari hard drive Anda untuk perakitan Anda (.dll). Setelah Anda memiliki daftar hasil, lakukan View-> Choose Details ... dan kemudian periksa "Versi File". Ini akan menampilkan nomor versi dalam daftar hasil, sehingga Anda dapat melihat dari mana versi lama itu berasal.

Juga, seperti yang dikatakan Lars, periksa GAC ​​Anda untuk melihat versi apa yang terdaftar di sana. Artikel Microsoft ini menyatakan bahwa rakitan yang ditemukan di GAC tidak disalin secara lokal selama proses pembuatan, jadi Anda mungkin perlu menghapus versi lama sebelum melakukan membangun kembali semua. (Lihat jawaban saya untuk pertanyaan ini untuk catatan tentang cara membuat file batch untuk melakukan ini untuk Anda)

Jika Anda masih tidak dapat mengetahui dari mana versi lama berasal, Anda dapat menggunakan aplikasi fuslogvw.exe yang disertakan bersama Visual Studio untuk mendapatkan informasi lebih lanjut tentang kegagalan pengikatan. Microsoft memiliki informasi tentang alat ini di sini . Perhatikan bahwa Anda harus mengaktifkan pencatatan dengan mengatur HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLogkunci registri ke 1.


19
Jangan lupa bahwa Versi File bukan bagian dari identitas majelis. Versi Majelis adalah, tetapi tidak harus sama dengan Versi File!
Lars Truijens

Jika menggunakan fuslogvw untuk layanan, baca blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx
Nick

Mencari nama file memecahkan masalah saya. Saya memiliki versi lama dll di folder ASP.Net Sementara saya dan InstallShield menggunakan itu alih-alih versi terbaru! Solusi bersih, bangun kembali, restart PC tidak melakukan apa-apa. Bekerja dengan baik secara lokal dan meledak setiap kali dikerahkan.
JumpingJezza

Segera setelah membangun, situs saya berfungsi dengan baik, tetapi beberapa saat kemudian, masalah ini muncul.
Shavais

Saya mengedit jawaban ini untuk mengatakan versi perakitan.
Layak 7

60

Saya sendiri mengalami masalah ini, dan saya menemukan bahwa masalahnya adalah sesuatu yang berbeda dari apa yang telah dialami orang lain.

Saya punya dua DLL yang menjadi referensi proyek utama saya: CompanyClasses.dll dan CompanyControls.dll. Saya mendapatkan kesalahan run-time dengan mengatakan:

Tidak dapat memuat file atau perakitan CompanyClasses, Versi = 1.4.1.0, Budaya = netral, PublicKeyToken = 045746ba8544160c 'atau salah satu dari ketergantungannya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan

Masalahnya adalah, saya tidak memiliki file CompanyClasses.dll di sistem saya dengan nomor versi 1.4.1. Tidak ada di GAC, tidak ada di folder aplikasi ... tidak ada di mana pun. Saya mencari seluruh hard drive saya. Semua file CompanyClasses.dll yang saya miliki adalah 1.4.2.

Masalah sebenarnya, saya temukan, adalah bahwa CompanyControls.dll mereferensikan versi 1.4.1 dari CompanyClasses.dll. Saya baru saja mengkompilasi ulang CompanyControls.dll (setelah itu referensi CompanyClasses.dll 1.4.2) dan kesalahan ini hilang untuk saya.


2
+1 Sesuatu yang serupa terjadi pada saya ketika saya memiliki salah satu referensi DLL saya versi lama dari Caliburn Micro.
Jason Massey

saya juga, pengalaman Anda menyemangati saya di mana saya harus mencari dan saya memperbaiki masalah saya.
Esen

Pilihan lain adalah membuka CompanyControlsproyek, klik kanan CompanyClasses.dllreferensi -> properti ->SpecificVersion = false
BlueRaja - Danny Pflughoeft

ini sangat sering terjadi pada aplikasi xamarin. Saya punya proyek xamarin.forms berbeda dari proyek xamarin.droid. Saya baru saja melihat posting Anda dan saya mengenalinya.
batmaci

Jika CompanyClasses.dll ditandatangani, maka SpecificVersion = falsesendirian tidak akan memotongnya. Anda akan membutuhkan bindingredirect.
Denise Skidmore

53

Berikut ini mengarahkan ulang setiap versi perakitan ke versi 3.1.0.0. Kami memiliki skrip yang akan selalu memperbarui referensi ini di App.config sehingga kami tidak perlu lagi berurusan dengan masalah ini.

Melalui refleksi, Anda dapat memperoleh perakitan publicKeyToken dan menghasilkan blok ini dari file .dll itu sendiri.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

Perhatikan bahwa tanpa atribut namespace XML (xmlns) ini tidak akan berfungsi.


1
Ini berhasil untuk saya. Saya mengubah 'newVersion = 3.3.3' menjadi 'newVersion = 3.1.0'
jward01

Lebih baik tidak menyusuri rute berliku jika Anda bisa menghindarinya. Ketika serangga itu datang menggigit Anda, ia akan menggigitnya dengan keras.
BanksySan

1
Masalah saya adalah fakta bahwa arahan ulang menunjuk ke rakitan yang tidak ada. App.Config menyimpan info rakitan dari paket NuGet terbaru yang saya instal. Ketika saya menurunkan versi paket-paket ini nanti, itu TIDAK membersihkannya. Ini adalah perpustakaan kelas standar .NET yang terkena proyek uji coba unit kerangka 4.7.2. Masalah proyek uji unit disajikan pada saat runtime ..
D-Sect

@ D-Sect benar. Jika kontrol sumber Anda menunjukkan bahwa web.config memiliki perubahan (karena Anda telah bermain dengan NuGets Anda), Anda mungkin bijaksana untuk mendukung mereka yang diarahkanRedirect ke sana. Menurunkan Versi NuGets tidak akan membersihkan pengalihan yang mengikat
bkwdesign

45

Jika Anda menggunakan Visual Studio, coba "solusi bersih" dan kemudian bangun kembali proyek Anda.


14
Ini biasanya solusi bagi saya. Seringkali, menghapus bindan objmelakukannya. Pada dasarnya, sesuatu yang saya gunakan untuk referensi masih duduk di sana berusaha memenuhi persyaratan yang sama. Misalnya, versi lama menjadi sesuatu yang saya referensikan langsung dan versi baru ada di NuGet.
David Betz

Menemukan masalah ini untuk beberapa DLL setelah menarik dari TFS. Solusi ini memperbaikinya untuk saya.
Milo

3
Bekerja untukku. Menghapus folder bin amd obj dan menyelesaikan masalah.
user1619480

Terima kasih, bekerja untuk saya juga, hanya menghapus folder bin.
The Cookies Dog

Bagi saya itu sudah cukup untuk menghapus binfolder. Anehnya, saya mencoba solusi bersih dan membangun kembali solusi sebelumnya tanpa hasil. Terkadang agak aneh.
Singa

36

Jawaban lain tidak akan berhasil untuk saya. Jika Anda tidak peduli tentang versi dan Anda hanya ingin aplikasi Anda berjalan maka klik kanan pada referensi dan set 'versi spesifik' ke false ... Ini bekerja untuk saya. masukkan deskripsi gambar di sini


8
Pengaturan itu hanya berpengaruh pada waktu kompilasi . Setelah dikompilasi, dibutuhkan versi perakitan yang sama persis dengan yang Anda kompilasi. Lihat stackoverflow.com/questions/24022134/…
Lars Truijens

22

Saya baru saja menemukan masalah ini dan masalahnya adalah saya memiliki salinan lama .dll di direktori debug aplikasi saya. Anda mungkin ingin juga memeriksa di sana (bukan GAC) untuk melihat apakah Anda melihatnya.


Kami baru saja bermigrasi ke server yang berbeda memiliki masalah ini karena kami menyimpan cadangan. Bekerja setelah menghapus salinan cadangan. Terima kasih :)
Jtuck

22

Saya akan meledakkan pikiran semua orang sekarang. . .

Hapus semua <assemblyBinding>referensi dari file .config Anda, dan kemudian jalankan perintah ini dari konsol NuGet Package Manager:

Get-Project -All | Add-BindingRedirect

Bekerja untuk saya juga. Terima kasih
Oleh Udovytskyi

Anda menghemat waktu saya 👌👌
Abdu Imam

4
ini hanya berfungsi ketika format manajemen paket adalah packages.config, jika Anda menggunakan 2017 csproj tanpa
paket.config

1
Pikiran resmi meledak
BGilman

itu trik kecil yang menyenangkan
hexagod

21

Saya menambahkan paket NuGet, hanya untuk menyadari sebagian kotak hitam dari aplikasi saya merujuk ke versi perpustakaan yang lebih lama.

Saya menghapus paket dan merujuk file DLL statis versi yang lebih lama, tetapi file web.config tidak pernah diperbarui dari:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

apa yang seharusnya dikembalikan ketika saya menghapus paket:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

Saya pernah melihat ini di mana, setidaknya untuk modul Entity Framework ketika Anda menggunakan NuGet, jika Anda mengklik kanan solusi Anda, pergi ke Kelola Paket NuGet untuk Solusi, lalu Paket Terpasang> Semua, pilih modul itu, pilih Kelola, Anda bisa biasanya batalkan pilihannya dari proyek Anda. Itu harus membersihkan hal-hal seperti ini tanpa harus melakukannya secara manual --- dengan asumsi vendor melakukan uji tuntas mereka. Tapi tangkapan yang bagus seperti yang kadang-kadang mereka tidak lakukan, jika itu yang Anda lepaskan.
vapcguy

20

Dalam kasus saya, kesalahan ini terjadi saat menjalankan aplikasi ASP.NET. Solusinya adalah:

  1. Hapus objdan binfolder di folder proyek

Bersih tidak bekerja, membangun kembali tidak bekerja, semua referensi baik-baik saja, tetapi itu tidak menulis salah satu perpustakaan. Setelah menghapus direktori itu, semuanya berjalan dengan sempurna.


3
Terima kasih, Levi Fuller. Jawaban ini harus lebih tinggi; untuk situasi saya itu tepat! Bagi saya kesalahan ini dimulai ketika saya membuat salinan cadangan web.config dan Visual Studio saya terus memuat file konfigurasi ini alih-alih konfigurasi yang sebenarnya, bahkan setelah saya menghapus salinan duplikat. Ini menyelesaikannya. Terima kasih.
BruceHill

Bekerja untuk saya juga. Masih tidak yakin mengapa ini bekerja :(
KangarooWest

14

Dalam kasus saya itu adalah versi lama dari DLL di C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \ direktori. Anda dapat menghapus atau mengganti versi lama, atau Anda dapat menghapus dan menambahkan kembali referensi ke DLL di proyek Anda. Pada dasarnya, cara mana pun akan membuat pointer baru ke File ASP.NET sementara.


2
Ini bekerja untuk saya ketika saya menutup Visual Studio, menghentikan IIS, dan menghapus semua file ASP.NET sementara. Catatan mungkin ada file di folder Framework dan Framework64 jika pada mesin 64 bit, serta di folder .NET 2.0 dan 4.0!
Bryan B

Saya menggunakan fungsi pencarian Menu Start Windows untuk menemukan semua DLL yang dibuat oleh solusi saya dan kemudian menghapus seluruh lot, di mana pun mereka ditemukan. Saya bisa melakukan ini tanpa rasa takut karena mereka hanya boleh dibuat selama debugging Visual Studio saya. Karena VS akan membangun kembali DLL yang hilang dan tidak ada yang di luar solusi saya yang dapat merujuk mereka, ini adalah operasi "aman" bagi saya.
Zarepheth

8

Bagi kami, masalahnya disebabkan oleh sesuatu yang lain. File lisensi untuk komponen DevExpress termasuk dua baris, satu untuk versi lama dari komponen yang tidak diinstal pada komputer khusus ini. Menghapus versi yang lebih lama dari file lisensi memecahkan masalah.

Bagian yang mengganggu adalah bahwa pesan kesalahan tidak memberikan indikasi referensi apa yang menyebabkan masalah.


2
Dalam kasus saya, setelah memutakhirkan ke versi DevExpress baru, file .resx formulir berisi referensi ke versi pustaka yang lama dihapus. Saya harus membuka .resx dalam tampilan kode dan memperbaiki versi ke yang baru atau menghapus entri yang tidak valid.
Artemix

5

Kesalahan yang sama persis ini dilemparkan jika Anda mencoba untuk terlambat mengikat menggunakan refleksi, jika rakitan Anda mengikat untuk diberi nama kuat atau memiliki token kunci publik berubah. Kesalahannya sama meskipun sebenarnya tidak ada rakitan yang ditemukan dengan token kunci publik yang ditentukan.

Anda perlu menambahkan token kunci publik yang benar (Anda bisa mendapatkannya menggunakan sn -T di dll) untuk menyelesaikan kesalahan. Semoga ini membantu.


1
Tolong jelaskan - apa itu "sn -T"? Dan di mana saya menambahkan token kunci publik?
Moritz Keduanya

3
"sn.exe" adalah alat yang dilengkapi dengan Visual Studio, ini adalah alat baris perintah yang dapat dijalankan dari prompt perintah Visual Studio. Cukup jalankan command prompt Visual Studio (dari menu mulai), navigasikan ke folder yang berisi perakitan Anda, dan ketik "sn -T <assembly>" di mana <assembly> adalah nama lengkap dll. Ini mendapatkan informasi "Token" Majelis. Setelah Anda memiliki ini, ketika Anda melakukan pengikatan terlambat dengan refleksi, masukkan info token ke string id perakitan (yaitu, "Assembly = MyAssembly.dll, Token Kunci Publik = <token guid>)
Guy Starbuck

2
Terima kasih atas jawaban ini. Saya mendapatkan kesalahan ini ketika merujuk Bagian Konfigurasi di App.ini saya. Saya baru saja menandatangani majelis, sehingga PublicKeyToken = null harus diperbarui dengan token baru (benar).
Liam

5

Milik saya adalah situasi yang sangat mirip dengan posting oleh Nathan Bedford tetapi dengan sedikit twist. Proyek saya juga mereferensikan dll yang diubah dalam dua cara. 1) Secara Langsung dan 2) Secara Tidak Langsung dengan mereferensikan komponen (pustaka kelas) yang memiliki referensi ke dll yang diubah. Sekarang proyek Visual studio saya untuk komponen (2) mereferensikan versi yang benar dari dll yang diubah. Namun nomor versi dari kompnen itu sendiri TIDAK diubah. Dan sebagai hasilnya, pemasangan versi baru proyek gagal untuk mengganti komponen itu pada mesin klien.

Hasil akhir: Referensi langsung (1) dan referensi tidak langsung (2) menunjuk ke berbagai versi dll yang diubah di mesin klien. Di mesin dev saya bekerja dengan baik.

Resolusi: Hapus aplikasi; Hapus semua DLLS dari folder aplikasi; Instal ulang. Sederhana seperti dalam kasus saya.


4

Saya akan membiarkan seseorang mendapat manfaat dari kebodohan geser saya. Saya memiliki beberapa dependensi untuk aplikasi yang sepenuhnya terpisah (sebut saja App1 ini). Dll dari App1 ditarik ke aplikasi baru saya (App2). Setiap kali saya melakukan pembaruan di APP1, saya harus membuat dll baru dan menyalinnya ke App2. Baik. . . Saya bosan menyalin dan menempel antara 2 versi App1 yang berbeda, jadi saya hanya menambahkan awalan 'NEW_' ke dll.

Baik. . . Saya menduga bahwa proses pembangunan memindai folder / bin dan ketika itu cocok dengan sesuatu yang salah, itu muntah dengan pesan kesalahan yang sama seperti disebutkan di atas. Saya menghapus versi "new_" saya dan itu dibuat sangat bagus.


4

Masalah saya adalah menyalin kode sumber ke mesin baru tanpa menghentikan rakitan yang dirujuk.

Tidak ada yang saya perbaiki kesalahannya, jadi dengan tergesa-gesa, saya menghapus direktori BIN sama sekali. Bangun kembali kode sumber saya, dan itu bekerja sejak saat itu.


4

Saya hanya ingin menambahkan bahwa saya sedang membuat proyek ASP.NET MVC 4 dasar dan menambahkan DotNetOpenAuth.AspNet via NuGet. Ini menghasilkan kesalahan yang sama setelah saya mereferensikan file DLL yang tidak cocok untuk Microsoft.Web.WebPages.OAuth.

Untuk memperbaikinya saya melakukan Update-Packagedan membersihkan solusi untuk membangun kembali penuh.

Itu bekerja untuk saya dan agak malas, tetapi waktu adalah uang :-P


1
Jawaban serupa untuk saya. Update-Package -reinstallinstal ulang semua paket NuGet pada versi yang sama.
Jess

1
Ini bagus; terima kasih sudah memposting. Saya mencoba semua saran hebat lainnya, tetapi ini adalah solusi yang berhasil. Syukurlah untuk orang-orang yang masih bersedia memposting solusi alternatif, bahkan ketika ada 80 di antaranya tersedia
Hambone

4

Saya mendapatkan kesalahan ini ketika membangun di build-service Team Foundation Server. Ternyata saya punya beberapa proyek dalam solusi saya menggunakan versi berbeda dari perpustakaan yang sama ditambahkan dengan NuGet. Saya menghapus semua versi lama dengan NuGet dan menambahkan yang baru sebagai referensi untuk semua.

Team Foundation Server menempatkan semua file DLL dalam satu direktori, dan hanya ada satu file DLL dari nama tertentu pada saat yang bersamaan.


Cara lain adalah dengan mengklik "Kelola paket NuGet untuk solusi ..." dan perbarui proyek pengujian Anda dan proyek yang sedang diuji ke versi yang sama (terbaru).
lixonn

4

App.config saya berisi a

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

untuk npgsql. Entah bagaimana di mesin pengguna, app.exe.config saya hilang. Saya tidak yakin apakah itu pengguna konyol, penginstal kesalahan, atau anti-virus yang belum. Mengganti file memecahkan masalah.


3

Saya baru saja menemukan alasan lain mengapa mendapatkan kesalahan ini. Saya membersihkan GAC saya dari semua versi perpustakaan tertentu dan membangun proyek saya dengan referensi ke versi spesifik yang digunakan bersama dengan executable. Ketika saya menjalankan proyek saya mendapat pengecualian ini mencari versi perpustakaan yang lebih baru.

Alasannya adalah kebijakan penerbit . Ketika saya mencopot versi perpustakaan dari GAC, saya lupa mencopot rakitan kebijakan penerbit juga, jadi alih-alih menggunakan perakitan yang dikerahkan secara lokal, loader perakitan menemukan kebijakan penerbit di GAC yang menyuruhnya mencari versi yang lebih baru.


3

Bagi saya konfigurasi cakupan kode dalam file "Local.testtesttings" "menyebabkan" masalah. Saya lupa memperbarui file yang direferensikan di sana.


3

Hanya menghapus isi folder bin proyek Anda dan membangun kembali solusi menyelesaikan masalah saya.


1
Nah, apa yang Anda tahu, Anda baru saja membantu saya keluar dari kesengsaraan saya, terima kasih memang
Ronny Mahlangu

2

bersihkan dan bangun kembali solusi mungkin tidak menggantikan semua dll dari direktori keluaran.

apa yang akan saya sarankan adalah mencoba mengubah nama folder dari "bin" menjadi "oldbin" atau "obj" menjadi "oldobj"

dan kemudian coba bangun kembali kesunyian Anda.

memeteraikan jika Anda menggunakan dll pihak ketiga yang Anda perlu menyalin ke folder "bin" atau "obj" yang baru dibuat setelah berhasil membangun.

Saya harap ini akan bekerja untuk Anda.


1

Menghapus majelis lama dari lokasi folder secara manual dan kemudian menambahkan referensi ke majelis baru mungkin membantu.


1

Saya mendapatkan kesalahan yang sama ... Dalam kasus saya, masalah ini diselesaikan sebagai berikut:

  • Pada awalnya ketika aplikasi diinstal maka orang-orang di sini telah menggunakan Microsoft Enterprise Library 4.1 dalam aplikasi.
  • Pada minggu sebelumnya mesin saya diformat & setelah itu hari ini ketika saya membangun aplikasi itu kemudian memberi saya kesalahan bahwa perakitan Enterprise Library hilang.
  • Kemudian saya menginstal Microsoft Enterprise Library 5.0 yang saya dapatkan di Google sebagai entri pencarian pertama.
  • Kemudian ketika saya membangun aplikasi maka itu memberi saya kesalahan di atas yaitu definisi manifes perakitan yang terletak tidak cocok dengan referensi perakitan.
  • Setelah banyak pekerjaan pencarian & analisis, saya menemukan bahwa aplikasi merujuk 4.1.0.0 & DLL di folder bin adalah versi 5.0.0.0
  • Apa yang saya lakukan adalah kemudian saya menginstal Microsoft Enterprise Library 4.1.
  • Menghapus referensi sebelumnya (5.0) & menambahkan referensi 4.0.
  • Membangun aplikasi & voila ... berhasil.

1

Inilah metode saya untuk memperbaiki masalah ini.

  1. Dari pesan pengecualian, dapatkan nama pustaka "masalah" dan nomor versi "yang diharapkan".

masukkan deskripsi gambar di sini

  1. Temukan semua salinan .dll di solusi Anda, klik kanan pada mereka, dan periksa versi .dll itu.

masukkan deskripsi gambar di sini

Oke, jadi dalam contoh ini, .dll saya pasti 2.0.5022.0 (jadi nomor versi Exception salah).

  1. Cari nomor versi yang ditampilkan dalam pesan Pengecualian di semua file .csproj dalam solusi Anda. Ganti nomor versi ini dengan angka aktual dari dll.

Jadi, dalam contoh ini, saya akan mengganti ini ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

... dengan ini...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

Pekerjaan selesai !


bagaimana jika file csproj saya tidak memiliki versi yang direferensikan?
John Demetriou

1

Dalam kasus saya masalahnya ada di antara kursi dan keyboard :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

Dua atau lebih majelis yang berbeda ingin menggunakan versi berbeda dari perpustakaan DotNetOpenAuth, dan itu tidak akan menjadi masalah. Selanjutnya, di komputer lokal saya web.config secara otomatis diperbarui oleh NuGet:

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

Kemudian saya menyadari bahwa saya lupa menyalin / menggunakan web.config baru ke server produksi. Jadi, jika Anda memiliki cara manual untuk menyebarkan web.config, periksa apakah sudah diperbarui. Jika Anda memiliki web.config yang sama sekali berbeda untuk server produksi, Anda harus menggabungkan bagian dependAssembly ini dalam sinkronisasi setelah menggunakan NuGet.


1

Jika Anda pernah mendapatkan kesalahan seperti " Definisi manifes perakitan yang ditemukan tidak cocok dengan referensi perakitan " dan jika Anda telah memperbarui melalui Project> Kelola Paket NuGet dan Perbarui tab di VS , hal pertama yang dapat Anda lakukan adalah mencoba menginstal versi lain dari paket setelah memeriksa versi dari halaman Galeri NuGet dan menjalankan perintah berikut dari Package Manager Console:

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

Meskipun jawaban tidak secara langsung terkait dengan paket yang dimaksud dan itu ditanyakan kembali, itu agak umum, masih relevan dan berharap itu membantu seseorang.


1

Tidak ada solusi yang berfungsi untuk saya. Saya mencoba membersihkan solusi proyek, menghapus bin, memperbarui paket, menurunkan paket dan sebagainya ... Setelah dua jam saya memuat App.config default dari proyek dengan rakitan dan di sana saya mengubah versi referensi yang salah dari:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

untuk:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.14.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

Setelah ini saya membersihkan proyek, membangunnya lagi dan berhasil. Tidak ada peringatan, tidak ada masalah.


0

Saya menerima pesan kesalahan ini karena mereferensikan sebuah majelis yang memiliki nama yang sama dengan majelis yang saya bangun.

Ini dikompilasi tetapi menimpa rakitan yang direferensikan dengan rakitan proyek saat ini - sehingga menyebabkan kesalahan.

Untuk memperbaikinya saya mengubah nama proyek, dan properti perakitan tersedia melalui mengklik kanan pada proyek dan memilih 'Properti'.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.