.Netto-4.6-website nicht laden Reference Assemblies korrekt
Ich habe ein web-Projekt in Visual Studio 2013, einschließlich mehrere library-Projekten bereit.
Problem ist, dass das hinzufügen einer Referenz (dh. System.Sammlung, System.Net), um das web-Projekt Hinzugefügt wird als "Referenz-Assembly" von C:\Program Files (x86)\Reference Assemblies\Microsoft
, wenn geladen in IIS ist nicht richtig laden die Umsetzung der Baugruppe (GAC). Beispiel Fehlermeldung folgt.
[BadImageFormatException: Cannot load a reference assembly for execution.]
[BadImageFormatException: Could not load file or assembly 'System.Collections' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)]
System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +34
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +77
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +16
System.Reflection.Assembly.Load(String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +38
[ConfigurationErrorsException: Could not load file or assembly 'System.Collections' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +728
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +196
System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +45
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +172
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +91
System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +111
System.Web.Compilation.BuildManager.ExecutePreAppStart() +156
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +624
[HttpException (0x80004005): Could not load file or assembly 'System.Collections' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +659
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +95
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +189
Löschen der Referenz-dlls aus dem bin-Ordner behebt das Problem, aber ich bin mir nicht sicher, was geändert werden muss um dies zu beheben richtig.
Antwort aktualisiert [unten]
Ich kann eigentlich genau wissen, was Ihr problem ist: Sie muss geprüft
gute Idee, habe ich überprüft alle Projekte und keines der beanstandeten Verweise gesetzt wurden, um die lokale Kopie
Die Frage bleibt dann. Wie
ja, noch ein Problem. Ich denke seine nach unten, um die Ausrichtung .net 4.6. die Standard-Baugruppen in iis 4.0, so würden diese zu stoßen, die Versionen bis (Theorie an diesem Punkt).
Ich kann eigentlich genau wissen, was Ihr problem ist: Sie muss geprüft
Copy Local = true
auf Ihrem Verweis auf System.Collections
. Und jetzt haben Sie es in den Papierkorb und anderen Orten. Ihre website versucht zu kompilieren eines in bin. So, ja, Antwort unten, kann nur behebt es mit <remove assembly>
. Aber wahr fix gesetzt Copy Local = false
. Sie in der Regel nicht wollen, um die lokale Kopie jeder System.*
Baugruppen.gute Idee, habe ich überprüft alle Projekte und keines der beanstandeten Verweise gesetzt wurden, um die lokale Kopie
Die Frage bleibt dann. Wie
System.Collections
kommt in die Tonne? versuchen Sie, ein Gebäude jedes Projekt separat und überprüfen Sie die Ausgabe. Es muss ein Projekt an, kopiert es.ja, noch ein Problem. Ich denke seine nach unten, um die Ausrichtung .net 4.6. die Standard-Baugruppen in iis 4.0, so würden diese zu stoßen, die Versionen bis (Theorie an diesem Punkt).
InformationsquelleAutor Sam | 2015-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösche ich das Paket von dem /Bin Ordner
und Projekt neu
seine Werke.
InformationsquelleAutor Brayan Aguilar
Jedes mal, wenn Sie sehen
BadImageFormatException
Sie ein Problem haben, das der Binär-format-Kompatibilität. Möglicherweise werden Ihre IIS-pool konfiguriert zum ausführen von 32-bit-pool und Ihre Baugruppen sind so gebaut, x64, oder Weise Umgekehrt. Oder, können Sie versuchen, die x64-Baugruppen auf 32-bit-Maschine. Vielleicht haben Sie auch x64-Maschine, anycpu-integrierte Baugruppen, aber einige 3rd-party-Versammlung gebaut ist streng zu 32-bit-code.Es ist eines von diesen, oder ähnliche
Nun, "usr" hat guter Punkt hier. Sie haben
Cannot load a reference assembly for execution
aber im Kontext mitBadImageFormatException
. Ich Frage mich, ob dies geschieht bei der Kompilierung. Für diese, versuchen Sie, diese web.configOder, wenn Sie
Versuchen Sie es zuerst
Nun, ist es normal, dass der GAC ist bevorzugter Standort für die Referenz, es sei denn, Sie liefern
Sondieren
- EinstellungenDie Fehlermeldung ist
Cannot load a reference assembly for execution
die Punkte Weg vom bitwert werden sollen.Thaks für den Hinweis. Ich aktualisierte die Antwort. Es könnte sein, dass, oder könnte etwas vor. Und siehe auch mein Kommentar zu der Frage
Danke! entfernen Sie die Assemblys, was waren die Fehler behoben, das Problem
InformationsquelleAutor T.S.
Auflösung:
Meine Bibliothek " - Projekte wurden auf einen core-libs (
System.*
etc) mit derRequiredTargetFramework
option auf 3.5. Dieser war nur sichtbar, in die csproj Datei, Beispiel:Wodurch alle möglichen Themen mit .net-Versionen von visual studio versucht hatte, Sie zu Sortieren Sie es durch hinzufügen der Bindung leitet in mein web.config, um diese zu v4 (und zählen reference assemblies), erfolglos.
Entfernen alle
RequiredTargetFramework
Elemente aus der csproj-Dateien hat das problem gelöst.Also, deine Frage war gar nicht leicht zu lösen, ohne im wahrsten Sinne des Wortes auf Ihrem computer. Die Möglichkeiten waren endlos. Wir wussten nur so viel - Sie waren be-falsche Montage.
<remove>
aufgehört falsche laden, aber nicht lösen das Problem vollständig. Dies bedeutet, Bedeutung geben, so viel info wie möglichIch bin mit .NET Core und hatte zu entfernen, die gegen Referenz aus einer HintPath in die csproj-Datei. Diese Antwort wies mich in die richtige Richtung. Danke!
InformationsquelleAutor Sam
In meinem Fall, habe ich den nuget-Paket-System.Sammlungen zu meiner asp.net 4.6.1 Projekt, und für einige Grund, es war nicht referenziert, in die csproj-Datei. Ich manuell bearbeitet werden, die csproj-Datei und fügte die Referenz. Neu geladen, und, voila, hat geklappt!
InformationsquelleAutor Marco Alves
Dieses Problem wird oft passieren, wenn Ihr verbindlich Umleitungen beziehen sich auf frühere Versionen als das, was Ihre Referenzen abhängig ist, und dies kann passieren, nach dem aktualisieren von Paketen (z.B. über NuGet). Zum beheben in der Regel, ich habe eine Reihe von Schritten, die als Antwort hier. Aber für diese spezielle Frage empfehle ich ausdrücklich folgenden Schritt 5:
InformationsquelleAutor Neo
Ist es mir passiert, nach VS 15.8 aktualisieren. Die Einstellung "Lokale Kopie" auf " false das Problem gelöst, für jede assembly, die gab mir die Fehlermeldung. Darüber hinaus habe ich entfernt (mit der hand) dupliziert "
<Private>
" - tags .csproj.InformationsquelleAutor Felipe Moura