web-dev-qa-db-de.com

Datei oder Assembly konnte nicht geladen werden.

Ich habe versucht, meine Website auf einen Server hochzuladen. Es funktionierte einwandfrei mit meinem lokalen Host. Daher habe ich alles in den Ordner localhost wwwroot auf den Server hochgeladen und die Verbindungszeichenfolge geändert.

Aber es gibt diesen Fehler: 

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: The pre-application start initialization method Start on type RouteDebug.PreApplicationStart threw an exception with the following error message: Could not load file or Assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified..
   at System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

Could not load file or Assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
   at RouteDebug.PreApplicationStart.Start()

Das Projekt war nopcommerce.

Was ist zu tun, um diesen Fehler zu beheben?

68
user1348351

Sie müssen die DLL in Ihr Projekt einfügen und auch einen Verweis darauf hinzufügen.

Hier ist ein Link zu einem ähnlichen Problem, das sich bereits auf Stack befindet: MVC3 Probleme bei der Bereitstellungsabhängigkeit

54
Colin Pear

Ich fand heraus, dass die Assembly nicht zum Projekt hinzugefügt wurde, obwohl es auf meiner Entwicklungsbox funktionierte. Suchen Sie in NuGet nach Microsoft.Web.Infrastructure und installieren Sie es von dort aus. Vergewissern Sie sich dann, dass "Lokal kopieren" ausgewählt ist.

25
jwrightmail

Nach einer Referenzreinigung stellte sich heraus, dass Microsoft.Web.Infrastructure entfernt wurde, jedoch nicht aus der packages.config-Datei. Nach dem erneuten Hinzufügen mit Package Manager Console sagt Visual Studio, dass es bereits installiert ist. Dies ist false, da es entfernt wurde.

Ich habe dann die Codezeile in der packages.config-Datei entfernt 

<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />

und führte den Befehl erneut aus

PM> Install-Package Microsoft.Web.Infrastructure

Danach funktioniert es jetzt gut.

24
riaandl

Installieren Sie AspNetMVC3ToolsUpdateSetup, das von here heruntergeladen wurde, um dieses Problem zu lösen, ohne einen Verweis hinzuzufügen 

23
Sgurijala

Trotz der Anzahl der Antworten füge ich noch eine hinzu, was IMHO die Dinge etwas klarer macht. 

Da Rob und wrightmail bereits erwähnt Microsoft.Web.Infrastructure ein NuGet-Paket ist (Link nicht erforderlich, Sie haben es im NuGet Package Manager).

Anscheinend wurde es von Ihrem Projekt referenziert und verschwand plötzlich. Es gibt eine Reihe von Gründen, aber es ist wichtig, dass Sie Automatische Paketwiederherstellung in Visual Studio aktiviert haben von:

  • NuGet-Pakete für Lösung verwalten (Kontextmenü im Projektmappen-Explorer), 
  • Erlaube NuGet, fehlende Pakete herunterzuladen (Einstellungen),
  • Automatische Suche nach fehlenden Paketen während der Erstellung in Visual Studio (Einstellungen),

bei bestimmten Paketen ist möglicherweise eine manuelle Neuinstallation erforderlich. Mir ist nicht bewusst, was NuGet verwirrt, eine Referenz möglicherweise manuell zu entfernen, aber hier ist die Lösung, die ich normalerweise in solchen Fällen verwende. Die folgende PM - Konsole hilft beim Wiederherstellen eines Pakets, während die ursprüngliche Version beibehalten wird (keine Aktualisierung auf möglicherweise vorhandene neue):

Update-Paket Microsoft.Web.Infrastructure -Reinstall

Die Versionserhaltung kann erforderlich sein, wenn Sie ein vorhandenes Paket nicht versehentlich mit seiner neueren Version überschreiben möchten, wodurch möglicherweise "alte" Funktionen entfernt werden, die Sie möglicherweise in Ihrem Projekt verwendet haben.

Und als Beweis dafür, dass sich die Version trotz einiger Zeit nicht ändert, ist hier die Ausgabe, wenn der Befehl ausgeführt wird:

PM> Update-Package Microsoft.Web.Infrastructure -Reinstall
Attempting to gather dependencies information for multiple packages with respect to project 'Samples.NuGet\DemoApp\DemoApp', targeting '.NETFramework,Version=v4.5.2'
Attempting to resolve dependencies for multiple packages
Resolving actions install multiple packages
...
Package removal starts here...
...
Removed package 'Microsoft.AspNet.Web.Optimization 1.1.3' from 'packages.config'
Successfully uninstalled 'Microsoft.AspNet.Web.Optimization 1.1.3' from DemoApp
Removed package 'WebGrease 1.5.2' from 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\uninstall.ps1'
Successfully uninstalled 'WebGrease 1.5.2' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Microsoft.Web.Infrastructure 1.0.0.0' from 'packages.config'
Successfully uninstalled 'Microsoft.Web.Infrastructure 1.0.0.0' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Antlr 3.4.1.9004' from 'packages.config'
Successfully uninstalled 'Antlr 3.4.1.9004' from MvcLenseApp
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
--- Install packages (in reverse order) ---
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Antlr.3.4.1.9004' to 'packages.config'
Successfully installed 'Antlr 3.4.1.9004' to DemoApp
...
More package installs here. Omitted for brevity...
...
Package 'Microsoft.Web.Infrastructure.1.0.0' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
Added package 'Microsoft.Web.Infrastructure.1.0.0' to 'packages.config'
Successfully installed 'Microsoft.Web.Infrastructure 1.0.0' to MvcLenseApp
...
More package installs here. Omitted for brevity...
...
Package 'WebGrease.1.5.2' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'WebGrease.1.5.2' to 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\install.ps1'
Successfully installed 'WebGrease 1.5.2' to DemoApp
Package 'Microsoft.AspNet.Web.Optimization.1.1.3' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Microsoft.AspNet.Web.Optimization.1.1.3' to 'packages.config'
...
End of package re-install. 
...
Successfully installed 'Microsoft.AspNet.Web.Optimization 1.1.3' to DemoApp
PM> 

Wenn Sie alle Pakete neu installieren möchten, müssen Sie sich natürlich mit den update/install-Befehlen in NuGet here und here vertraut machen.

21

Resharper hat Microsoft.Web.Infrastructure als ungenutzte Referenz erkannt und daher gelöscht. Lokal funktionierte gut, aber dann bekam ich den gleichen Fehler nach dem Veröffentlichen an dev.

Fazit: Vorsicht, wenn Sie Referenzen löschen, die von Resharper als nicht verwendet markiert wurden

5
Javier

Installieren Sie Web Platform von https://www.Microsoft.com/web/platform/ .

Ich hoffe es hilft.

4
Ivo

Dieses Problem ist auf einem neuen Windows 10-Computer auf VS2015 mit einem vorhandenen Projekt aufgetreten . Package Manager 3.4.4 . Wiederherstellen von Paketen aktiviert.

Die Wiederherstellung scheint nicht vollständig zu funktionieren . Mußte Folgendes in der Package Manager-Befehlszeile ausführen

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall

Dies hat die folgenden Änderungen an meiner Lösungsdatei vorgenommen, die durch die Wiederherstellung NICHT ausgeführt wurden.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Durch Hinzufügen der obigen Elemente zum Abschnitt ItemGroup in Ihrer Lösungsdatei wird das Problem AUCH gelöst, vorausgesetzt, dass ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll vorhanden ist.

Es ist einfacher, einfach die -Reinstall-Installation durchzuführen, aber es ist gut zu verstehen, was es anders macht als die Wiederherstellung des Pakets.

3
Rohan

Ich hatte ein ähnliches Problem. NuGet zeigte das Paket erfolgreich installiert an, aber die Referenz wurde meinem Projekt nicht hinzugefügt.

Das Ausführen von <PM> Install-Package Microsoft.Web.InfraStructure hat auch nicht geholfen, da der Paketmanager immer wieder sagte, er sei bereits installiert

Ich habe es schließlich manuell hinzugefügt, indem ich die csproj-Datei bearbeitet und diese Zeilen hinzugefügt habe:

 <Reference Include="Microsoft.Web.Infrastructure">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Das hat das Problem gelöst.

3

Für mich fehlte Microsoft.Web.Infrastructure.dll im Ordner bin, es war nicht festgelegt, lokal im Projekt zu kopieren.

1
Alex Hedley

Sie müssen das ASP.NET MVC-Framework auf dem Server herunterladen, auf dem sich Ihre Anwendung befindet. Es ist eine schnelle Lösung, die Sie hier herunterladen und installieren müssen (Dies ist das MVC 3-Framework http://www.asp.net/mvc/mvc3 ).

1
KickerKeeper

Auf meinem Rechner wurde die Nuget-Abhängigkeit nicht richtig heruntergeladen, der lib-Ordner im Nuget-Paket war nicht vorhanden, daher der Fehler. 

Vor

 enter image description here

Ich habe das Nuget-Paket im Paketordner umbenannt und von Nuget mit dem erforderlichen lib-Ordner korrekt heruntergeladen.

Nach dem enter image description here

0
Morgan Kenyon

Ich weiß nicht, was mit meinem Projekt passiert ist, aber es verweist auf den falschen Pfad zur DLL. Nuget hat es richtig installiert und es lag zwar in meinem Dateisystem zusammen mit den anderen Paketen, wurde aber nur falsch referenziert. 

Der packages-Ordner besteht zwei Verzeichnisse aus meinem Projekt und wurde erst durch das Starten des Pfads mit ..\packages\ nach oben verschoben. Ich habe den Pfad geändert, um mit ..\..\packages\ zu beginnen, und das Problem wurde behoben.

0
jlafay

Entfernen Sie zuerst Microsoft.Web.Infrastructure aus package.config.

und führte den Befehl erneut aus

PM> Install-Package Microsoft.Web.Infrastructure Und stellen Sie sicher, dass die Copy Local-Eigenschaft auf true festgelegt ist.

0
Amrendra

Sehr einfache Lösung:

Wechseln Sie in Visual Studio zu Tools/Library Package Manager/Package Manager Console

<PM> Install-Package Microsoft.Web.InfraStructure

Viel Spaß

0
Omid Rahimi

Hier war mein Szenario.

Ich hatte eine Multiprojektlösung, die die Projekte A, B, C und N enthielt. N.

Projekt B war eine Codebibliothek, die eine Factory für selectlist-Objekte enthielt.

Das Projekt würde in der Entwicklung wie erwartet laufen, aber bei der Veröffentlichung in unserer Testumgebung wurde mir der Fehler gemeldet, auf den Sie stießen:

Could not load file or Assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Was passiert war, war durch den Paketmanager von Nuget. Ich hatte versehentlich "Microsoft ASP.NET MVC" installiert, um Abhängigkeiten für Folgendes zu installieren:

  • Microsoft.AspNet.Razor
  • Microsoft.AspNet.WebPages

Niedrig und siehe, Microsoft.AspNet.WebPages hängt von "Microsoft.Web.Infrastructure" ab.

Meine Lösung deinstallierte die drei oben genannten Pakete (MVC, Razor, WebPages). Klicken Sie dann mit der rechten Maustaste auf Referenzen> Referenz hinzufügen> Assemblies> Erweiterungen> System.Web.MVC.

0
Rob

In einigen Fällen können solche Fehler behoben werden, indem Sie das Projekt/die Projektmappe bereinigen, bin/ und obj/ physisch entfernen und neu erstellen. Dies kann beispielsweise passieren, wenn einige Pakete und Referenzen installiert/hinzugefügt und dann entfernt werden und einige Artefakte zurückbleiben.

Es passierte mir mit Microsoft.Web.Infrastructure: Anfangs erforderte das Projekt diese Versammlung nicht. Nach einigen Experimenten, deren Nettoeffekt am Ende Null sein sollte, bekam ich diese Ausnahme. Die oben genannten Schritte lösten das Problem, ohne dass nicht verwendete Abhängigkeiten installiert werden mussten.

0
Oleg Shirokikh