Datei oder Assembly 'Microsoft.Web.Infrastructure konnte nicht geladen werden,

79

Ich habe versucht, meine Website auf einen Server hochzuladen. Es funktionierte gut mit meinem lokalen Host, also habe ich alles in meinem localhost- wwwrootOrdner auf den Server hochgeladen und die Verbindungszeichenfolge geändert.

Aber da ist dieser 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?

user1348351
quelle
Das Kopieren hat wahrscheinlich nicht funktioniert, da auf dem Host nicht dieselben Abhängigkeiten installiert sind. Lesen Sie
Mike Trusov

Antworten:

57

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

Hier ist ein Link zu einem ähnlichen Problem, das bereits bei Stack: MVC3 Deployment Dependency Problems aufgetreten ist

Colin Pear
quelle
Müssen Sie den Floder "_bin_deployableAssemblies" auch auf den Server hochladen?
user1348351
Es gibt verschiedene Möglichkeiten, dies zu handhaben, und dies hängt auch davon ab, wie Sie es bereitstellen. Wenn Sie jedoch auf den Link in meinem Beitrag klicken und dann durch das Blog in der oberen Antwort mit dem Häkchen gehen, werden Sie sehen, dass bei korrekter Einrichtung die DLLs aus den _bin_deployableAssemblies automatisch erledigt werden sollen, wenn Sie eine ausführen Bereitstellen (oder Web-Bereitstellen). Hier ist der Link zu dem Blog, den ich erwähnt habe.
Colin Pear
5
Der Blog, zu dem dieser Link führt, scheint nicht mehr verfügbar zu sein. Diese Antwort - stackoverflow.com/a/12683392/137474 hat bei mir funktioniert.
Baldy
@ColinPear, vielen Dank, genau das, wonach ich gesucht habe. Ich hatte eine E-Commerce-Webanwendung, die dies anforderte!.
PatsonLeaner
In meinem Fall funktioniert meine Site in plesk ohne "Microsoft.Web.Infrastructure.dll", aber beim Wechsel zu cpanel hat sich dieser Fehler gezeigt!
Omid-RH
39

Es stellt sich heraus, dass es nach einer Referenzreinigung entfernt wurde Microsoft.Web.Infrastructure, jedoch nicht aus der Datei packages.config. Nach dem erneuten Versuch, es mithilfe von hinzuzufügen Package Manager Console, gibt Visual Studio an, dass es bereits installiert ist. Dies ist falsch, da es entfernt wurde.

Ich habe dann die Codezeile in der packages.configDatei 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.

Riaan de Lange
quelle
32

Die Installation von AspNetMVC3ToolsUpdateSetup, das von hier heruntergeladen wurde , würde dieses Problem lösen, ohne einen Verweis hinzuzufügen

Sgurijala
quelle
28

Trotz der Anzahl der Antworten werde ich eine weitere hinzufügen, die meiner Meinung nach die Dinge etwas klarer macht.

Wie Rob und Wrightmail bereits erwähnt haben, Microsoft.Web.Infrastructurehandelt es sich um ein NuGet-Paket (Link nicht erforderlich, Sie haben ihn im NuGet-Paket-Manager).

Anscheinend wurde es von Ihrem Projekt referenziert und verschwand plötzlich. Es kann eine Reihe von Gründen geben, aber das Wichtigste ist, dass Sie die automatische Paketwiederherstellung in Visual Studio möglicherweise aktiviert haben, indem Sie:

  • Verwalten von NuGet-Paketen für die Lösung (Kontextmenü im Projektmappen-Explorer),
  • Erlauben Sie NuGet, fehlende Pakete (Einstellungen) herunterzuladen.
  • Beim Erstellen in Visual Studio (Einstellungen) automatisch nach fehlenden Paketen suchen.

Bestimmte Pakete erfordern möglicherweise eine manuelle Neuinstallation. Mir ist nicht bekannt, was NuGet verwirrt, möglicherweise wird eine Referenz manuell entfernt, aber hier ist die Lösung, die ich normalerweise in solchen Fällen anwende. Die folgende PM-Konsole hilft beim Wiederherstellen eines Pakets unter Beibehaltung der Originalversion (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 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 möglicherweise hier und hier mit den Aktualisierungs- / Installationsbefehlen in NuGet vertraut machen .

Alexander Christov
quelle
27

Ich stellte fest, dass die Baugruppe nicht zum Projekt hinzugefügt wurde, obwohl sie auf meiner Entwicklungsbox funktionierte. Suchen Sie in NuGet nach Microsoft.Web.Infrastructure und installieren Sie es von dort aus. Stellen Sie dann sicher, dass Copy Local ausgewählt ist.

jwrightmail
quelle
1
Gleiches Problem, es war auf CopyLocal = True, keine Ahnung, warum es nicht funktioniert hat. Ihre Lösung hat mein Problem gelöst :)
GôTô
6

Dieses Problem trat auf einem neuen Windows 10-Computer unter VS2015 mit einem vorhandenen Projekt auf. Paketmanager 3.4.4. Wiederherstellungspakete aktiviert.

Die Wiederherstellung scheint nicht vollständig zu funktionieren. Musste folgendes in der Package Manager-Befehlszeile ausführen

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

Dadurch wurden die folgenden Änderungen an meiner Lösungsdatei vorgenommen, die bei der Wiederherstellung NICHT durchgefü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 einfaches Hinzufügen der oben genannten Elemente zum Abschnitt ItemGroup in Ihrer Lösungsdatei wird AUCH das Problem behoben, sofern .. \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll vorhanden ist.

Es ist einfacher, nur die Neuinstallation durchzuführen, aber es ist gut zu verstehen, was es anders macht als die Paketwiederherstellung.

Rohan
quelle
Ich hatte das gleiche Problem. Versucht "Nuget-Pakete wiederherstellen" Rechtsklick-Menüoption der Lösung. Die Ausgabe sagte mir, dass es nichts zu wiederherstellen gab. Auf Ihren Rat hin habe ich Update-Package -ProjectName "my project name here" über die Paketmanagerkonsole ausgeführt und alle Pakete wurden korrekt hinzugefügt
Rob Bowman
@RobBowman Das ist großartig, Rob. In Ihrem Fall spielt dies möglicherweise keine Rolle, aber achten Sie darauf, auch das Flag -Reinstall einzuschließen. Dadurch wird sichergestellt, dass Sie dieselben Paketversionen wie zuvor erhalten. Wenn Sie dieses Flag weglassen, wird Ihr Paket auf die neueste Version aktualisiert. Dies kann zu Problemen führen, wenn Sie dies nicht beabsichtigen. Vollständige Informationen finden Sie hier. Docs.microsoft.com/en-us/nuget/tools/ps-ref-update-package
Rohan
5

Resharper hat Microsoft.Web.Infrastructure als nicht verwendete Referenz erkannt und daher gelöscht. Vor Ort funktionierte gut, aber dann bekam ich den gleichen Fehler nach der Veröffentlichung auf dev.

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

Javier
quelle
Genau das habe ich getan.
AndreFeijo
In meinem Fall funktioniert meine Site in plesk ohne "Microsoft.Web.Infrastructure.dll", aber beim Wechsel zu cpanel hat sich dieser Fehler gezeigt!
Omid-RH
3

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

Das Ausführen <PM> Install-Package Microsoft.Web.InfraStructurehalf auch nicht, da der Paketmanager immer wieder sagte, dass es bereits installiert ist

Ich habe es schließlich manuell hinzugefügt, indem ich die csproj-Datei bearbeitet und folgende 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.

Erinnerung an einen Traum
quelle
Ich habe die csproj-Datei überprüft und sie verweist auf einen Ordner, der das Problem verursacht hat. Das Entfernen dieses zusätzlichen Ordnernamens löste mein Problem
Superachu
2

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

KickerKeeper
quelle
2

Für mich Microsoft.Web.Infrastructure.dllfehlte im bin-Ordner, es war nicht so eingestellt, dass es lokal im Projekt kopiert. Kopierte die DLL aus einem anderen Projekt in die Lösung und die Seite wird geladen.

Alex Hedley
quelle
2

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 Eigenschaft Copy Local wahr ist.

Amrendra
quelle
1

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ß

Omid Rahimi
quelle
1

Hier war mein Szenario.

Ich hatte eine Multiprojektlösung mit den Projekten A, B, C .. N.

Projekt B war eine Codebibliothek, die eine Fabrik für selectlistObjekte enthielt .

Das Projekt würde in der Entwicklung wie erwartet ausgeführt, aber beim Veröffentlichen in unserer Testumgebung wurde der folgende Fehler angezeigt:

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 über den Nuget-Paket-Manager. Ich hatte versehentlich "Microsoft ASP.NET MVC" installiert, das Abhängigkeiten für Folgendes installierte:

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

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

Meine Lösung bestand darin, die drei oben genannten Pakete (MVC, Razor, WebPages) zu deinstallieren und dann mit der rechten Maustaste auf Referenzen> Referenz hinzufügen> Baugruppen> Erweiterungen> System.Web.MVC zu klicken.

rauben
quelle
Ich konnte nicht über Assembles hinzufügen, aber das Zurücksetzen der Nuget-Pakete löste das Problem
Nitesh
1

Ich musste "Copy Local" in den Referenzeigenschaften auf "False" und dann wieder auf "True" setzen. Dadurch wurde der .csproj-Datei die Einstellung Private True hinzugefügt.

<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>

Ich hatte angenommen, dass dies bereits eingestellt war, da "Copy Local" als True angezeigt wurde.

Die Geduld
quelle
0

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

Der packagesOrdner enthält zwei Verzeichnisse aus meinem Projekt und es wurde nur eines nach oben verschoben, indem der Pfad mit gestartet wurde ..\packages\. Ich habe den Pfad geändert ..\..\packages\und mein Problem behoben.

Jeff LaFay
quelle
0

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

Vor

Geben Sie hier die Bildbeschreibung ein

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

Nach Geben Sie hier die Bildbeschreibung ein

Morgan Kenyon
quelle
0

In einigen Fällen das Projekt / die Reinigungslösung, physikalisch zu entfernen bin/und obj/und Wiederaufbau würde solche Fehler beheben. 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 Montage nicht. Nach einigen Experimenten, deren Nettoeffekt am Ende Null sein sollte, bekam ich diese Ausnahme. Die oben genannten Schritte haben das Problem behoben, ohne dass nicht verwendete Abhängigkeiten installiert werden müssen.

Oleg Shirokikh
quelle
0

Ich hatte dieses Problem. Ich hatte die DLL in das Projekt aufgenommen und die Einstellung zum Kopieren von Lokal war standardmäßig wahr. Ich weiß nicht, warum es angefangen hat, da diese DLL schon lange im Projekt war. Ich habe einige Erwähnungen gehört, dass ReSharper es möglicherweise entfernt, aber ich kann nicht sagen, dass ich eine nicht verwendete Referenzentfernung durchgeführt habe.

Was mir geholfen hat, war: - Ausführen des "Update-Pakets Microsoft.Web.Infrastructure -Reinstall" für das Projekt, das die gesamte Lösung aktualisiert hat, aber nicht an und für sich geholfen hat. - Dann habe ich die Referenzen der Projekte durchgesehen und Copy Local auf false und dann wieder auf true gesetzt. Dies führte tatsächlich dazu, dass eine Zeile in die CSPROJ-Datei unter der DLL-Referenz True hinzugefügt wurde. Oder etwas in der Art ... So oder so, jetzt kopierte der Build die Dateien wie erwartet.

Jurijs Kastanovs
quelle
0

Also, hier ist, was für mich mit VS2019 funktioniert hat. Beim Versuch, Nuget-Pakete für ein Projekt zu aktualisieren, wurde diese Fehlermeldung angezeigt, während sich die Microsoft.Web.Infrastructure in einem anderen Projekt in derselben Lösung befand. Ich musste den Ordner Microsoft.Web.Infrastructure.1.0.0.0 aus dem Ordner Packages meines Projekts löschen. Installierte es über Nuget neu und dann fing alles wieder an zu funktionieren. Verrücktes Zeug.

Shane Cessna
quelle