Ich habe den folgenden einfachen Test geschrieben, um zu versuchen, das fließende Interface von Castle Windsor zu lernen:
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);
}
}
}
Wenn ich den Test über TestDriven.NET ausführe, wird folgende Fehlermeldung angezeigt:
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()
Wenn ich den Test über die NUnit-GUI ausführe, erhalte ich:
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.
Wenn ich die Assembly öffne, auf die ich in Reflector verweise, kann ich folgende Informationen sehen:
Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
und dass es definitiv Castle.MicroKernel.Registration.IRegistration enthält
Was könnte los sein?
Ich sollte erwähnen, dass die Binärdateien aus dem neuesten Build von Castle stammen, obwohl ich noch nie mit nant gearbeitet habe, sodass ich mich nicht darum gekümmert habe, aus dem Quellcode neu zu kompilieren, sondern nur die Dateien im bin-Verzeichnis übernommen habe. Ich sollte auch darauf hinweisen, dass mein Projekt problemlos kompiliert werden kann.
Wenn ein Projekt auf ein anderes Projekt verweist (z. B. ein Windows-Anwendungstyp, der auf eine Klassenbibliothek verweist) und beide denselben Assemblynamen haben, wird diese Fehlermeldung angezeigt. Sie können das referenzierte Projekt entweder stark benennen oder (noch besser) die Baugruppe des referenzierenden Projekts umbenennen (auf der Registerkarte "Anwendung" der Projekteigenschaften in VS).
quelle
Die Lösung für mich wurde oben nicht erwähnt, also dachte ich, ich würde meine Antwort dem langen Schwanz hinzufügen ...
HttpHandler
Am Ende hatte ich einen alten Verweis auf eine Klasse (an ) in web.config, die nicht mehr verwendet wurde (und keine gültige Referenz mehr war). Aus irgendeinem Grund wurde es beim Ausführen in Studio ignoriert (oder ist diese Klasse in meinem Entwickler-Setup noch verfügbar?), Und daher wurde dieser Fehler erst angezeigt, als ich versuchte, ihn auf IIS bereitzustellen. Ich habe nach dem Assemblynamen in web.config gesucht, die nicht verwendete Handlerreferenz entfernt, dann ist dieser Fehler behoben und alles funktioniert hervorragend. Hoffe das hilft jemand anderem.quelle
Ich hatte das gleiche Problem und für mich hatte es nichts mit Namespace- oder Projektnamen zu tun.
Aber wie mehrere Benutzer angedeutet haben, hat dies damit zu tun, dass auf eine alte Assembly immer noch verwiesen wird.
Ich empfehle, alle "bin" / binären Ordner aller Projekte zu löschen und die gesamte Lösung neu zu erstellen. Dadurch wurden möglicherweise veraltete Assemblys ausgewaschen, und danach exportierte MEF alle meine Plugins ohne Probleme.
quelle
Ich habe diesen Fehler erhalten und nichts, was ich auf StackOverflow oder anderswo gefunden habe, hat ihn gelöst, aber die Antwort von bmoeskau von auf diese Frage hat mich in die richtige Richtung für das Update geführt, das noch nicht als Antwort erwähnt wurde. Meine Antwort bezieht sich nicht ausschließlich auf die ursprüngliche Frage, aber ich poste sie hier unter der Annahme, dass jemand, der dieses Problem hat, durch Durchsuchen von Google oder Ähnlichem hierher kommt (wie ich in einem Monat, wenn mich das wieder beißt) , arg!).
Meine Baugruppe befindet sich im GAC, daher ist theoretisch nur eine Version der Baugruppe verfügbar. Außer, dass IIS die alte Version hilfreich zwischenspeichert und mir diesen Fehler gibt. Ich hatte gerade die Baugruppe im GAC geändert, umgebaut und neu installiert. Eine mögliche Lösung besteht darin, den Task-Manager zu verwenden, um w3wp.exe zu beenden . Dies zwingt IIS, die Baugruppe erneut aus dem GAC zu lesen: Problem gelöst.
quelle
Version = 1.0.3.0 zeigt Castle RC3 an, die fließende Schnittstelle wurde jedoch einige Monate nach der Veröffentlichung von RC3 entwickelt. Daher haben Sie anscheinend ein Versionsproblem. Vielleicht haben Sie Castle RC3 im GAC registriert und es verwendet dieses ...
quelle
Ich bekomme das gelegentlich und es war immer schlecht, die Versammlung im GAC zu haben
quelle
Wenn dieser Fehler durch das Ändern des Namespace verursacht wird, stellen Sie sicher, dass der Ordner dieses Projekts in denselben Namen umbenannt wird, und schließen Sie VS.NET. Bearbeiten Sie das Projekt, bei dem das Problem mit Notepad auftritt, und ersetzen Sie dort die Knoten
"RootNamespace> New_Name_Of_Folder_Of_Your_Project_Namespace" RootNamespace> "AssemblyName> New_Name_Of_Folder_Of_Your_Project_Namespace" AssemblyName>
quelle
Das Löschen meiner PDF-Datei für die DLL löste dieses Problem für mich. Ich vermute, es hat etwas mit der Tatsache zu tun, dass die DLL mit ILMerge erstellt wurde.
quelle
Wenn ich auf ein solches Problem stoße, finde ich das FUSLOGVW-Tool sehr hilfreich. Es überprüft die Bindungsinformationen der Baugruppe und protokolliert sie für Sie. Manchmal fehlen die Bibliotheken, manchmal werden in GAC verschiedene Versionen geladen. Manchmal verursacht die Plattform der referenzierten Bibliotheken die Probleme. Dieses Tool macht deutlich, wie die Bindungen der Abhängigkeiten aufgelöst werden, und dies kann Ihnen wirklich helfen, Ihr Problem zu untersuchen / zu debuggen.
Fusion Log Viewer / fuslogvw / Assembly Binding Log Viewer. Weitere Informationen / Download hier: http://msdn.microsoft.com/en-us/library/e74a18c4.aspx .
quelle
Ich hatte dieses Problem, nachdem ich einen Klassennamen berücksichtigt hatte:
Could not load type 'Namspace.OldClassName' from assembly 'Assembly name...'.
Stoppen von IIS und Löschen des Inhalts in
Temporary ASP.NET Files
es für mich behoben.Abhängig von Ihrem Projekt (32/64-Bit, .net-Version usw.) unterscheidet sich das Richtige
Temporary ASP.NET Files
:%systemroot%\Microsoft.NET\Framework64\{.netversion}\Temporary ASP.NET Files\
%systemroot%\Microsoft.NET\Framework\{.netversion}\Temporary ASP.NET Files\
%temp%\Temporary ASP.NET Files
quelle
Vielleicht nicht so wahrscheinlich, aber für mich wurde es dadurch verursacht, dass meine Anwendung versuchte, eine Bibliothek mit demselben Assemblynamen zu laden (xxx.exe beim Laden von xxx.dll).
quelle
Laufen Sie einfach mit einer anderen Ursache darauf:
Ausführen von Komponententests im Release-Modus, aber die geladene Bibliothek war die Debug-Modus-Version, die nicht aktualisiert wurde
quelle
Noch eine andere Lösung: Alte DLLs, die aufeinander verweisen und von Visual Studio in zwischengespeichert werden
C:\Users\[yourname]\AppData\Local\Microsoft\VisualStudio\10.0\ProjectAssemblies
Beenden Sie VS, löschen Sie alles in diesem Ordner und Bob ist Ihr Onkel.
quelle
Ich hatte das gleiche Problem. Ich habe dies gerade behoben, indem ich die Assembly über GAC aktualisiert habe.
Um Gacutil auf einer Entwicklungsmaschine zu verwenden, gehen Sie zu :
Start -> programs -> Microsoft Visual studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010)
.Ich habe diese Befehle zum Deinstallieren bzw. Neuinstallieren verwendet.
Hinweis: Ich habe meine DLL nicht deinstalliert, in meinem Fall habe ich gerade die DLL mit dem aktuellen Pfad aktualisiert.
quelle
Ich bin auf dieses Szenario gestoßen, als ich versucht habe, einen Typ (über Reflection) in eine Assembly zu laden, die für eine andere Version einer Referenz erstellt wurde, die für die Anwendung gilt, in der dieser Fehler aufgetreten ist.
Da ich sicher bin, dass der Typ in beiden Versionen der Baugruppe unverändert ist, habe ich einen benutzerdefinierten Baugruppenauflöser erstellt, der die fehlende Baugruppe der von meiner Anwendung bereits geladenen Baugruppe zuordnet. Am einfachsten ist es, der Programmklasse einen statischen Konstruktor hinzuzufügen:
Dies setzt natürlich voraus, dass sich die Assembly im Startpfad der Anwendung befindet und einfach angepasst werden kann.
quelle
Laufen Sie einfach mit einer anderen Ursache darauf:
Ich habe eine zusammengeführte Assembly verwendet, die mit ILRepack erstellt wurde. Die Assembly, von der Sie die Typen abfragen, muss die erste sein, die an ILRepack übergeben wird. Andernfalls sind ihre Typen nicht verfügbar.
quelle
Möglicherweise können Sie dies durch Bindungsumleitungen in * .config beheben. http://blogs.msdn.com/b/dougste/archive/2006/09/05/741329.aspx bietet eine gute Diskussion über die Verwendung älterer .net-Komponenten in neueren Frameworks. http://msdn.microsoft.com/en-us/library/eftw1fys(vs.71).aspx
quelle
Dies geschieht normalerweise, wenn Sie eine Version Ihrer Assembly im GAC bereitgestellt haben, diese jedoch nicht mit neuen Klassen aktualisiert wurde, die Sie möglicherweise der Assembly in Ihrer IDE hinzugefügt haben. Stellen Sie daher sicher, dass die Assembly im GAC mit Änderungen aktualisiert wird, die Sie möglicherweise in Ihrem Projekt vorgenommen haben.
Wenn Sie beispielsweise über eine gemeinsame Klassenbibliothek verfügen und in dieser Klassenbibliothek den Typ Common.ClassA haben, stellen Sie diesen für den stark benannten GAC bereit. Sie kommen später und fügen einen anderen Typ mit dem Namen Common.ClassB hinzu. Sie führen Ihren Code auf Ihrer IDE aus, ohne zuvor die Änderungen, die Sie am GAC von Common vorgenommen haben, mit dem neu hinzugefügten Common.ClassB-Typ bereitzustellen.
quelle
Ich habe den gleichen Fehler erhalten, nachdem ich eine referenzierte DLL in einem ausführbaren Desktop-Projekt aktualisiert habe. Das Problem bestand darin, dass die hier erwähnten Personen eine alte Referenz bezogen und einfach zu beheben waren, aber hier nicht erwähnt wurden. Daher dachte ich, dass dies die Zeit anderer Personen sparen könnte.
Wie auch immer, ich habe DLL A aktualisiert und den Fehler von einer anderen referenzierten DLL erhalten. Nennen wir es hier B, wo DLL A einen Verweis auf DLL B hat.
Das Aktualisieren von DLL B hat das Problem behoben.
quelle
Hinzufügen Ihrer DLL zu GAC (globaler Assemblycache)
Visual Studio-Eingabeaufforderung => Als Administrator ausführen
gacutil / i "DLL-Dateipfad"
Sie können die hinzugefügte Assembly C: \ Windows \ system32 \ sehen
Es wird auch die fehlende DLL oder "Datei oder Assembly konnte nicht geladen werden" in der SSIS-Skriptaufgabe behoben
quelle
In Visual Studio 2017 ist ein ähnliches Problem aufgetreten, bei dem MSTest als Testframework verwendet wurde. Ich habe System.TypeLoadException-Ausnahmen erhalten, als einige (nicht alle) Komponententests ausgeführt wurden, aber diese Komponententests wurden beim Debuggen bestanden. Ich habe letztendlich Folgendes getan, um das Problem zu lösen:
Nach diesen Schritten wurden alle Komponententests beim Ausführen bestanden.
quelle
Ich habe das gleiche wie oben erlebt, nachdem ich das Signieren von Baugruppen in der Lösung entfernt hatte. Die Projekte würden nicht bauen.
Ich fand heraus, dass eines der Projekte auf das StrongNamer NuGet-Paket verwies, das den Erstellungsprozess modifiziert und versucht, nicht signierte Nuget-Pakete zu signieren.
Nachdem ich das StrongNamer-Paket entfernt hatte, konnte ich das Projekt erneut erstellen, ohne die Assemblys zu signieren / stark zu benennen.
quelle
Ich habe dies nur behoben, indem ich den Befehl iisreset über die Eingabeaufforderung ausgeführt habe ... Immer das erste, was ich mache, wenn ich solche Fehler erhalte.
quelle