Saya telah menulis tes sederhana berikut dalam mencoba mempelajari Antarmuka Lancar Castle Windsor:
using NUnit.Framework;
using Castle.Windsor;
using System.Collections;
using Castle.MicroKernel.Registration;
namespace WindsorSample {
public class MyComponent : IMyComponent {
public MyComponent(int start_at) {
this.Value = start_at;
}
public int Value { get; private set; }
}
public interface IMyComponent {
int Value { get; }
}
[TestFixture]
public class ConcreteImplFixture {
[Test]
public void ResolvingConcreteImplShouldInitialiseValue() {
IWindsorContainer container = new WindsorContainer();
container.Register(Component.For<IMyComponent>().ImplementedBy<MyComponent>().Parameters(Parameter.ForKey("start_at").Eq("1")));
IMyComponent resolvedComp = container.Resolve<IMyComponent>();
Assert.AreEqual(resolvedComp.Value, 1);
}
}
}
Ketika saya menjalankan tes melalui TestDriven.NET saya mendapatkan kesalahan berikut:
System.TypeLoadException : Could not load type 'Castle.MicroKernel.Registration.IRegistration' from assembly 'Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc'.
at WindsorSample.ConcreteImplFixture.ResolvingConcreteImplShouldInitialiseValue()
Ketika saya menjalankan tes melalui NUnit GUI saya mendapatkan:
WindsorSample.ConcreteImplFixture.ResolvingConcreteImplShouldInitialiseValue:
System.IO.FileNotFoundException : Could not load file or assembly 'Castle.Windsor, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The system cannot find the file specified.
Jika saya membuka Majelis yang saya rujuk di Reflektor, saya dapat melihat informasinya adalah:
Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
dan itu pasti berisi Castle.MicroKernel.Registration.IRegistration
Apa yang sedang terjadi?
Saya harus menyebutkan bahwa binari diambil dari build Castle terbaru meskipun saya belum pernah bekerja dengan nant jadi saya tidak repot-repot melakukan kompilasi ulang dari sumber dan hanya mengambil file di direktori bin. Saya juga harus menunjukkan bahwa proyek saya dapat dikompilasi tanpa masalah.
Jika Anda memiliki satu proyek yang mereferensikan proyek lain (seperti jenis 'Aplikasi Windows' yang merujuk pada 'Perpustakaan Kelas') dan keduanya memiliki nama Majelis yang sama, Anda akan mendapatkan kesalahan ini. Anda dapat memberi nama kuat proyek yang direferensikan atau (bahkan lebih baik) mengganti nama rakitan proyek referensi (di bawah tab 'Aplikasi' pada properti proyek di VS).
sumber
Solusi untuk ini untuk saya tidak disebutkan di atas, jadi saya pikir saya akan menambahkan jawaban saya ke ekor panjang ...
Saya akhirnya memiliki referensi lama ke kelas (an
HttpHandler
) di web.config yang tidak lagi digunakan (dan tidak lagi merupakan referensi yang valid). Untuk beberapa alasan itu diabaikan saat berjalan di Studio (atau mungkin saya memiliki kelas itu masih dapat diakses dalam pengaturan dev saya?) Dan jadi saya hanya mendapat kesalahan ini setelah saya mencoba menerapkan ke IIS. Saya mencari nama assembly di web.config, menghapus referensi penangan yang tidak digunakan, kemudian kesalahan ini hilang dan semuanya berfungsi dengan baik. Semoga ini bisa membantu orang lain.sumber
Saya memiliki masalah yang sama dan bagi saya itu tidak ada hubungannya dengan namespace atau penamaan proyek.
Tapi seperti yang diisyaratkan oleh beberapa pengguna itu ada hubungannya dengan rakitan lama yang masih dirujuk.
Saya sarankan untuk menghapus semua folder "bin" / biner dari semua proyek dan membangun kembali seluruh solusi. Ini menghapus semua rakitan yang berpotensi ketinggalan zaman dan setelah itu MEF mengekspor semua plugin saya tanpa masalah.
sumber
Saya mendapatkan kesalahan ini dan tidak ada yang saya temukan di StackOverflow atau di tempat lain yang menyelesaikannya, tetapi jawaban bmoeskau untuk pertanyaan ini mengarahkan saya ke arah yang benar untuk perbaikan, yang belum disebutkan sebagai jawaban. Jawaban saya tidak sepenuhnya terkait dengan pertanyaan asli, tetapi saya mempostingnya di sini dengan asumsi bahwa seseorang yang memiliki masalah ini akan menemukannya di sini melalui pencarian Google atau yang serupa (seperti saya satu bulan dari sekarang ketika ini menggigit saya lagi , arg!).
Perakitan saya ada di GAC, jadi secara teoritis hanya ada satu versi perakitan yang tersedia. Kecuali IIS membantu menyimpan versi lama dan memberi saya kesalahan ini. Saya baru saja mengubah, membangun kembali dan menginstal ulang perakitan di GAC. Salah satu solusi yang mungkin adalah menggunakan Task Manager untuk mematikan w3wp.exe . Ini memaksa IIS untuk membaca ulang perakitan dari GAC: masalah terpecahkan.
sumber
Versi = 1.0.3.0 menunjukkan Castle RC3, namun antarmuka yang lancar dikembangkan beberapa bulan setelah rilis RC3. Oleh karena itu, tampaknya Anda mengalami masalah pembuatan versi. Mungkin Anda memiliki Castle RC3 yang terdaftar di GAC dan menggunakan yang itu ...
sumber
Saya mendapatkan ini sesekali dan selalu turun untuk memiliki perakitan di GAC
sumber
Jika kesalahan ini disebabkan oleh perubahan namespace, pastikan folder proyek itu diganti namanya menjadi nama yang sama, dan tutup VS.NET Edit proyek yang bermasalah dengan Notepad dan ganti node yang ada
"RootNamespace> New_Name_Of_Folder_Of_Your_Project_Namespace" RootNamespace> "AssemblyName> New_Name_Of_Folder_Of_Your_Project_Namespace" AssemblyName>
sumber
Menghapus file .pdb saya untuk dll memecahkan masalah ini untuk saya. Saya menduga itu ada hubungannya dengan fakta bahwa dll itu dibuat menggunakan ILMerge.
sumber
Ketika saya mengalami masalah seperti itu, saya menemukan alat FUSLOGVW sangat membantu. Ini memeriksa informasi pengikatan perakitan dan mencatatnya untuk Anda. Terkadang pustaka hilang, terkadang GAC memiliki versi berbeda yang sedang dimuat. Terkadang platform pustaka yang direferensikan menyebabkan masalah. Alat ini menjelaskan bagaimana binding dependensi diselesaikan dan ini benar-benar dapat membantu Anda untuk menyelidiki / men-debug masalah Anda.
Fusion Log Viewer / fuslogvw / Assembly Binding Log Viewer. Periksa lebih lanjut / unduh di sini: http://msdn.microsoft.com/en-us/library/e74a18c4.aspx .
sumber
Saya mengalami masalah ini setelah memfaktorkan nama kelas:
Could not load type 'Namspace.OldClassName' from assembly 'Assembly name...'.
Menghentikan IIS dan menghapus konten di
Temporary ASP.NET Files
memperbaikinya untuk saya.Tergantung pada proyek Anda (32 / 64bit, versi .net, dll), yang benar
Temporary ASP.NET Files
berbeda:%systemroot%\Microsoft.NET\Framework64\{.netversion}\Temporary ASP.NET Files\
%systemroot%\Microsoft.NET\Framework\{.netversion}\Temporary ASP.NET Files\
%temp%\Temporary ASP.NET Files
sumber
Mungkin tidak mungkin, tetapi bagi saya itu disebabkan oleh aplikasi saya mencoba memuat perpustakaan dengan nama assembly yang sama (xxx.exe memuat xxx.dll).
sumber
Jalankan saja ini dengan penyebab lain:
menjalankan pengujian unit dalam mode rilis tetapi pustaka yang dimuat adalah versi mode debug yang belum diperbarui
sumber
Solusi lain: DLL lama menunjuk satu sama lain dan di-cache oleh Visual Studio dalam format
C:\Users\[yourname]\AppData\Local\Microsoft\VisualStudio\10.0\ProjectAssemblies
Keluar dari VS, hapus semua yang ada di folder ini dan Bob paman Anda.
sumber
Saya memiliki masalah yang sama. Saya baru saja menyelesaikan ini dengan memperbarui perakitan melalui GAC.
Untuk menggunakan gacutil pada mesin pengembangan pergi ke:
Start -> programs -> Microsoft Visual studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010)
.Saya menggunakan perintah ini untuk menghapus dan menginstal ulang masing-masing.
Catatan: Saya belum menghapus dll saya dalam kasus saya, saya baru saja memperbarui dll dengan jalur saat ini.
sumber
Saya mengalami skenario ini ketika mencoba memuat jenis (melalui refleksi) dalam rakitan yang dibangun terhadap versi berbeda dari referensi umum untuk aplikasi tempat kesalahan ini muncul.
Karena saya yakin jenisnya tidak berubah di kedua versi rakitan, saya akhirnya membuat resolver rakitan khusus yang memetakan rakitan yang hilang ke yang sudah dimuat aplikasi saya. Cara termudah adalah dengan menambahkan konstruktor statis ke kelas program seperti ini:
Ini tentu saja mengasumsikan bahwa Assembly terletak di jalur startup aplikasi dan dapat dengan mudah disesuaikan.
sumber
Jalankan saja ini dengan penyebab lain:
Saya menggunakan perakitan gabungan yang dibuat dengan ILRepack. Majelis yang Anda tanyakan jenisnya harus yang pertama diteruskan ke ILRepack atau jenisnya tidak akan tersedia.
sumber
Anda mungkin dapat menyelesaikan ini dengan pengalihan yang mengikat di * .config. http://blogs.msdn.com/b/dougste/archive/2006/09/05/741329.aspx memiliki diskusi yang bagus tentang penggunaan komponen .net lama dalam kerangka kerja yang lebih baru. http://msdn.microsoft.com/en-us/library/eftw1fys(vs.71).aspx
sumber
Hal ini biasanya terjadi ketika Anda memiliki satu versi rakitan yang diterapkan di GAC tetapi belum diperbarui dengan kelas baru yang mungkin telah Anda tambahkan pada rakitan di IDE Anda. Oleh karena itu, pastikan bahwa perakitan di GAC diperbarui dengan perubahan yang mungkin Anda buat dalam proyek Anda.
Misalnya, jika Anda memiliki Perpustakaan Kelas Umum dan di Perpustakaan Kelas Anda memiliki tipe Common.ClassA dan menerapkan ini ke GAC dengan nama yang kuat. Anda datang kemudian dan menambahkan tipe lain yang disebut Common.ClassB dan Anda menjalankan kode Anda pada IDE Anda tanpa terlebih dahulu menerapkan perubahan yang Anda buat ke GAC of Common dengan tipe Common.ClassB yang baru ditambahkan.
sumber
Saya mendapat kesalahan yang sama setelah memperbarui dll yang direferensikan dalam proyek desktop yang dapat dieksekusi. Masalahnya adalah karena orang-orang yang disebutkan di sini terkait dengan referensi lama dan mudah diperbaiki tetapi belum disebutkan di sini, jadi saya pikir ini mungkin menghemat waktu orang lain.
Pokoknya saya memperbarui dll A dan mendapat kesalahan dari dll referensi lain sebut saja B di sini di mana dll A memiliki referensi ke dll B.
Memperbarui dll B memperbaiki masalah.
sumber
Menambahkan DLL Anda ke GAC (cache perakitan global)
Visual Studio Command Prompt => Jalankan sebagai Administrator
gacutil / i "jalur file dll"
Anda dapat melihat perakitan tambahan C: \ Windows \ system32 \
Ini juga akan menyelesaikan dll yang hilang atau "Tidak dapat memuat file atau perakitan" dalam tugas Skrip SSIS
sumber
Saya mengalami masalah serupa di Visual Studio 2017 menggunakan MSTest sebagai kerangka pengujian. Saya menerima pengecualian System.TypeLoadException saat menjalankan beberapa (tidak semua) pengujian unit, tetapi pengujian unit tersebut akan lulus saat di-debug. Saya akhirnya melakukan hal berikut yang memecahkan masalah:
Setelah mengambil langkah-langkah ini, semua pengujian unit mulai lulus saat dijalankan.
sumber
Saya mengalami hal yang sama seperti di atas setelah menghapus penandatanganan majelis dalam solusi. Proyek tidak akan dibangun.
Saya menemukan bahwa salah satu proyek mereferensikan paket StrongNamer NuGet, yang memodifikasi proses pembuatan dan mencoba untuk menandatangani paket Nuget yang tidak ditandatangani.
Setelah menghapus paket StrongNamer, saya dapat membangun proyek lagi tanpa menandatangani / memberi nama kuat rakitan.
sumber
Jika ini adalah aplikasi Windows, coba periksa duplikat di Global Assembly Cache (GAC). Ada sesuatu yang menimpa versi bin / debug Anda.
Jika ini adalah aplikasi web, Anda mungkin perlu menghapus di server dan mengunggah ulang. Jika Anda menerbitkan Anda mungkin ingin mencentang kotak Hapus semua file yang ada sebelum menerbitkan. Bergantung pada versi Visual Studio, itu harus ditempatkan di Publikasikan> Pengaturan> Opsi Penerbitan File
sumber
Saya baru saja menyelesaikan ini dengan menjalankan perintah iisreset menggunakan command prompt ... Selalu hal pertama yang saya lakukan ketika saya mendapatkan kesalahan seperti itu.
sumber