Tidak dapat memuat file atau perakitan atau salah satu dependensinya

238

Saya mengalami masalah "Tidak dapat memuat file atau perakitan atau salah satu dari dependensinya" yang lain.

Informasi tambahan: Tidak dapat memuat file atau rakitan 'Microsoft.Practices.Unity, Versi = 1.2.0.0, Culture = netral, PublicKeyToken = 31bf3856ad364e35' atau salah satu dari ketergantungannya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan. (Pengecualian dari HRESULT: 0x80131040)

Saya tidak tahu apa yang menyebabkan ini atau bagaimana saya bisa men-debug untuk menemukan penyebabnya.

Saya telah melakukan pencarian di katalog solusi file .csproj saya, dan setiap tempat saya memiliki Persatuan saya miliki:

Referensi Termasuk = "Microsoft.Practices.Unity, Versi = 2.0.414.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL"

Tidak dapat menemukan referensi di mana pun yang bertentangan dengan 1.2.0.0 di salah satu proyek saya.

Ada ide bagaimana saya harus menyelesaikan masalah ini?

Saya juga akan menghargai tips tentang cara men-debug masalah seperti ini secara umum.

ronag
sumber
1
Bisakah salah satu majelis referensi Anda menggunakan beberapa barang di Unityperpustakaan lama ?
decyclone
3
Mungkin ... tapi bagaimana saya bisa menemukan majelis mana? Saya punya banyak proyek dalam solusi saya dan banyak tersangka potensial ... coba-coba bruteforce tampaknya agak sia-sia ...
ronag
3
Ini bukan referensi perakitan, Anda referensi versi 2.0. Tetapi pada saat runtime, CLR menemukan 1.2, versi lama. Jika Anda tidak melihat DLL lama di direktori build Anda, kemudian gunakan Fuslogvw.exe untuk mencari tahu bagaimana CLR menemukan salinan lama ini.
Hans Passant
2
Lihatlah folder bin proyek Anda dan lihat apakah dll proyek Anda memiliki konflik dengan namanya. Hapus saja yang itu dan kemudian Bangun kembali solusi Anda. Itu berhasil bagi saya.
coggicc
11
"atau salah satu ketergantungannya" adalah bagian yang sangat mengganggu saya. Jika tidak dapat memuat "salah satu dependensinya" kesalahan akan mengatakan yang mana "salah satu dependensinya" tidak dapat dimuat. Bentuk saat ini tidak berguna, mungkin juga mengatakan tidak dapat memuat thinggy
Paul McCarthy

Jawaban:

116
  1. Periksa apakah Anda mereferensikan sebuah majelis yang pada gilirannya merujuk pada versi lama unity. Sebagai contoh katakanlah Anda memiliki sebuah majelis yang disebut ServiceLocator.dllyang membutuhkan versi lama dari Unity assembly, sekarang ketika Anda mereferensikannya, ServiceLocatorAnda harus menyediakannya dengan Unity versi lama, dan itu yang menjadi masalah.

  2. Mungkin folder output di mana semua proyek membangun rakitan mereka, memiliki versi lama dari persatuan.

Anda dapat menggunakan FusLogVw untuk mencari tahu siapa yang memuat majelis lama, cukup tentukan jalur untuk log, dan jalankan solusi Anda, lalu periksa (di FusLogvw) baris pertama tempat perakitan Unity dimuat, klik dua kali dan lihat pemanggilannya perakitan, dan di sini Anda pergi.

Nour Sabouny
sumber
6
Di mana file log FuseLogVw
Stiger
1
Untuk menghindari keharusan menemukan file log, Anda dapat menentukan jalur log khusus: Pengaturan, centang kotak centang Aktifkan jalur log kustom, masukkan jalur log kustom, segarkan.
RedGreenCode
82

Buka IIS Manager

Pilih Kelompok Aplikasi

lalu pilih kolam yang Anda gunakan

pergi ke pengaturan lanjutan (di sisi kanan)

Ubah bendera Aktifkan aplikasi 32-bit menjadi true.

kranthi
sumber
IIS -> pilih masing-masing ApplicationPool -> Pengaturan Dasar -> periksa apakah kerangka kerja terbaru dipilih di bawah dropdown ".NET Framework versi"
Martin
Anda juga dapat mengklik kanan proyek Anda dalam VS. dan hapus tanda centang prefer 32 bit
eran otzap
Terima kasih. Itu berhasil. Ya sudah dalam kasus saya, hanya untuk mencoba. Saya membuatnya Salah dan berhasil.
meekash55
Ketika saya menggabungkan proyek dari 1 server ke server lain, flag ini memang False lagi, terima kasih atas solusinya!
Solusi Appsum
69

Bagi saya, tidak ada solusi lain yang berfungsi (termasuk strategi bersih / bangun kembali). Saya menemukan solusi lain untuk menutup dan membuka kembali Visual Studio .

Saya kira ini memaksa Visual Studio memuat ulang solusi dan semua proyek, memeriksa kembali dependensi dalam proses.

Robotnik
sumber
33
Jika Anda tidak percaya ini akan berhasil, setidaknya cobalah. Saya sendiri tidak bisa percaya sampai saya melakukannya.
Ben Cull
3
😍😍😍😍😍😍😍😍😍😍😍 Bekerja untuk saya
Devidas M Das
48

Cobalah untuk membersihkan folder Debug dan Rilis dalam solusi Anda. Kemudian hapus dan tambahkan lagi kesatuan.

Aleksei Anufriev
sumber
3
Masalah ini dapat disebabkan oleh banyak hal ... solusi Anda memecahkan masalah saya, dan mungkin menyelesaikan masalah orang lain juga.
Scott Rippey
1
@ScottRippey Ini berhasil bagi saya. Saya pertama-tama menghapus semua file .pdb dan kemudian memuat kembali proyek saya dan membangunnya kembali.
botenvouwer
21

99% tidak dapat memuat file atau perakitan atau salah satu masalah dependensinya disebabkan oleh dependensi! Saya sarankan Anda mengikuti langkah-langkah ini:

  1. Unduh Dependency Walker dari http://www.dependencywalker.com/

  2. Luncurkan Dependency Walker dan buka dll (dalam kasus saya NativeInterfaces.dll)

  3. Anda dapat melihat satu atau lebih dll dengan kesalahan dalam merah membuka file Kesalahan ...

  4. Ini berarti bahwa dll ini tidak ada di sistem Anda; dalam kasus saya nama dll adalahMSVCR71.DLL

  5. Anda dapat mengunduh missings dll dari google dan menyalin di jalur yang benar (dalam kasus saya c:\windows\system32)

  6. Pada titik ini, Anda harus mendaftarkan dll baru di GAC (Global Assembly Cache): buka terminal DOS dan tulis:

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
  7. Mulai ulang aplikasi Anda!

Stefano Lonati
sumber
22
Ketergantungan walker bagus, tetapi menyalin DLL acak dari internet ke Windows ... kurang bagus. Lebih baik mencoba mencari penginstal yang menyediakan dll.
RJFalconer
Saya mendapat beberapa file ( API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL) tidak ditemukan dan membawa saya ke pertanyaan stackoverflow ini . Pada dasarnya perlu diingat bisa melihat false positive untuk beberapa file, tautan memberikan lebih detail.
cheriejw
16

Microsoft Enterprise Library (direferensikan oleh .NetTiers) adalah masalah kami, yang pada gilirannya merujuk ke versi Unity yang lebih lama. Untuk menyelesaikan masalah kami menggunakan pengalihan yang mengikat berikut di web.config:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Atau, Anda mungkin ingin memperbarui Perpustakaan Perusahaan ke versi terbaru.

Rebecca
sumber
16

Mengikuti berhasil bagi saya.

  • Hapus Berkas Sementara C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Berkas ASP.NET Sementara
  • Tutup VSTS dan Buka Lagi
  • Hapus dan Tambahkan DLL yang sama (Catatan: Anda menambahkan versi yang cocok yang sama)
Riddhi M.
sumber
15

Periksa file Web.config / App.config di proyek Anda. Lihat apakah nomor versi sudah benar.

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />

Ini berhasil untuk saya.

Jaseem Abbas
sumber
2
Ini bekerja untuk saya walaupun itu web.config, bukan app.config
samneric
15

Terlepas dari pertanyaan asli yang diposting lima tahun lalu, masalahnya masih ada dan agak mengganggu.

Solusi umum adalah analisis menyeluruh dari semua majelis yang dirujuk untuk memahami apa yang salah. Untuk membuat tugas ini lebih mudah, saya membuat alat (ekstensi Visual Studio) yang memungkinkan memilih perakitan .NET ( file .dllatau .exe) untuk mendapatkan grafik dari semua rujukan yang direferensikan sambil menyoroti referensi yang bertentangan atau hilang.

Alat ini tersedia di Galeri Visual Studio: https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

Contoh output: masukkan deskripsi gambar di sini

marss19
sumber
Tidak berfungsi dengan edisi komunitas Visual Studio
Draex_
Saya percaya harus ada masalah lain, tidak terkait dengan edisi Visual Studio. Saya menguji ekstensi pada edisi Komunitas VS 2017 dan VS 2015. Sebenarnya itu dikembangkan melalui edisi Komunitas VS 2017.
marss19
Aha. Apakah Anda memiliki ekstensi lain yang diinstal? Halaman ini mengatakan bahwa DGML tidak didukung di VS Community: msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport
Draex_
1
Tidak ada alat arsitektur dalam edisi Komunitas tetapi editor DGML sendiri tersedia. Anda dapat menginstalnya dengan memilih "Instal editor DGML" di bawah "Komponen Individual" -> "Tools Code" melalui Visual Studio Installer -> Modify
marss19
11

tangkapan layarDi penjelajah solusi klik kanan pada proyek (bukan solusi), di tab build pilih Target platform: "Any CPU".

Engin Aydogdu
sumber
Setelah memeriksa kumpulan aplikasi, "Aktifkan Aplikasi 32-Bit" disetel ke False, tetapi target platform saya adalah x86. Mengubahnya ke CPU ATAU x64 apa pun memperbaiki masalah saya.
Keith Ketterer
11

Jawaban Juntos benar tetapi Anda juga harus mempertimbangkan:

Untuk kesatuan v2.1.505.2 berbeda AssemblyVersion dan AssemblyFileVersion atribut yang ditentukan:

masukkan deskripsi gambar di sini

AssemblyFileVersion digunakan oleh NuGet tetapi CLR tidak peduli! CLR hanya akan menggunakan AssemblyVersion !

Jadi pengalihan Anda harus diterapkan ke versi yang ditentukan dalam atribut AssemblyVersion . Jadi 2.1.505.0 harus digunakan

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>

Lihat juga: Apa perbedaan antara AssemblyVersion, AssemblyFileVersion, dan AssemblyInformationalVersion?

Ievgen Naida
sumber
6

Saya juga mendapat kesalahan mengerikan ini dan menemukan solusi untuk ini ...

  1. Klik kanan pada nama Solusi
  2. Klik Bersihkan Solusi
  3. Mulai ulang Visual Studio
  4. Properti proyek Goto >> Build
  5. Ubah Konfigurasi untuk Melepaskan
  6. Mulai Debugging (F5)

1), 2)

Klik kanan pada nama Solusi

4), 5)

Ubah Konfigurasi untuk Melepaskan

Semoga ini bisa membantu Anda juga.

Roshana Pitigala
sumber
5
  • Goto: Solusi -> Paket
  • Klik Tab Lanjut (Temukan di bawah halaman)
  • Tambahkan dll Anda ke majelis tambahan (dengan cara ini kami dapat menambahkan dll eksternal di sharepoint).
Vijay Singh
sumber
7
Saya tidak punya "Solusi -> Paket" dalam proyek VS2010 saya
Muflix
5

Tidak yakin apakah ini bisa membantu.

Periksa apakah nama Assembly dan namespace Default di Properies dalam pertandingan Anda cocok. Ini menyelesaikan masalah saya yang menghasilkan kesalahan yang sama.

Sjaan
sumber
Luar biasa! Nama file dll dan namespace saya berbeda, saya menyalin namespace dan mengganti nama dll saya.
Anynomous Khan
5

Dalam kasus saya di folder bin adalah dll referensi non disebut Unity.MVC3, saya mencoba mencari referensi apa pun di visual studio ini tanpa hasil, jadi solusi saya sangat mudah seperti menghapus dll itu dari folder bin.

Benar-benar
sumber
4

Terima kasih Riddhi M. Mengikuti bekerja untuk saya.

Hapus File Sementara C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ File ASP.NET Sementara Tutup VSTS dan Buka Lagi Hapus dan Tambahkan DLL yang sama (Catatan: Anda menambahkan versi pencocokan yang sama)

Sridhar Kommana
sumber
Menghabiskan waktu yang lama untuk ini dan saya tidak percaya ini adalah jawabannya. Ini biasanya solusi masuk yang baik ketika Anda melihat beberapa perilaku aneh dalam VS. Terima kasih.
Bonez024
3

Anda mengatakan Anda memiliki banyak proyek dalam solusi Anda ... yah, mulailah dengan satu di dekat bagian atas urutan pembuatan. Dapatkan yang itu untuk dibangun dan setelah Anda mengetahuinya, Anda dapat menerapkan perbaikan yang sama ke yang lainnya.

Jujur, Anda mungkin hanya perlu menyegarkan referensi Anda. Sepertinya Anda memperbarui versi Anda dan tidak memperbarui referensi, atau itu masalah jalur relatif jika Anda menjaga solusi Anda dalam kontrol sumber. Cukup verifikasi asumsi Anda, dan tambahkan kembali referensi.

Joel Martinez
sumber
3

Mengikuti berhasil bagi saya.

  • Hapus Berkas Sementara C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Berkas ASP.NET Sementara
    • kemudian klik kanan pada Temporary Asp.net Files> properties> security dan berikan total kontrol akses ke IIS dan kepada semua pengguna yang menjalankan proyek saya
hanya saya
sumber
3

Masalah ini terjadi pada saya di mana salah satu pustaka dependen saya sedang mengkompilasi DLL dengan "Any CPU" ketika pustaka induk mengharapkan kompilasi "x64".

Creamstout10
sumber
3

Saya memiliki masalah yang sama dengan saya menyelesaikannya melalui instruksi di bawah ini:

  1. buka menu alat dan pilih opsi
  2. dalam opsi, jendela buka Proyek dan Solusi / Proyek Web
  3. memeriksa use the 64bit version of IIS ...

masukkan deskripsi gambar di sini

mohammad almasi
sumber
2

Anda harus menghapus file appname.dll Anda dari folder output Anda. Bersihkan folder Debug dan Rilis. Bangun kembali dan salin ke folder keluaran, dst. File dll.

gucci
sumber
2

I "Set as Startup Project" pustaka / proyek tidak diturunkan / tidak ditemukan.

Lalu mengerahkannya.

Berhasil!

Saya pikir itu tidak dapat menemukan. Dll karena pada awalnya tidak ada.

nirav
sumber
2

Kemungkinan penyebab lain: pastikan Anda tidak sengaja memberi kedua proyek nama perakitan yang sama di properti proyek.

nathanchere
sumber
Ini membutuhkan waktu berjam-jam untuk mencari tahu .... Saya tidak sengaja menyebutkan proyek uji unit saya dengan nama yang sama dengan proyek utama, sehingga proyek uji unit dll pasti telah menimpa proyek dll
Iannazzi
2

Solusi saya untuk .NET 4.0, menggunakan Enterprise Library 5, adalah menambahkan referensi ke:

Microsoft.Practices.Unity.Interception.dll

MacGyver
sumber
2

Carilah referensi yang bertentangan. Bahkan setelah bersih dan dibangun kembali, referensi yang bertentangan masih akan menimbulkan masalah. Masalah saya adalah antara AForge dan Accord. Saya menghapus kedua referensi, dan menambahkan kembali referensi memilih kembali referensi tertentu (khusus untuk kasus saya, hanya sesuai).

pengguna3791372
sumber
2

Bagi saya membangun kembali game unity tanpa Unity C # Promark Tanda centang berfungsi.

Praful Rudra
sumber
2

Dalam kasus saya, tidak ada jawaban yang diusulkan yang berfungsi.

Inilah yang bekerja untuk saya:

  1. Hapus referensi
  2. Ganti nama DLL
  3. Impor referensi lagi

Langkah kedua tampaknya penting karena tidak akan berhasil tanpanya.

Nicolas Raoul
sumber
2

Coba periksa apakah properti "Salin ke Lokal" untuk referensi disetel ke true dan versi spesifik disetel ke true. Ini relevan untuk aplikasi di Visual Studio.

Srinivas Somasundaram
sumber
2

Saya memiliki ini hari ini, dan dalam kasus saya masalahnya sangat aneh:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
  </dependentAssembly>0.

Catat karakter tersesat di akhir XML - entah bagaimana itu telah dipindahkan dari nomor versi ke akhir blok XML ini!

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
  </dependentAssembly>

Diubah ke atas dan voila! Semuanya bekerja lagi.

garryp
sumber
1

jika Anda mendapatkan pesan kesalahan ini dengan membuka aplikasi pada Anda windows xp itu berarti Anda pertama kali menginstal aplikasi itu karena tidak berfungsi tanpa kerangka kerja 4 dan paket layanan 3. Anda menginstal keduanya dan lagi Anda mendapatkan kesalahan ini sehingga Anda harus menginstal ulang aplikasi itu lagi tetapi uninstall dulu dari menambah dan menghapus

jika ini tidak berhasil, jangan menyalahgunakan saya. saya juga seorang junior

basit durrani
sumber