Fehler Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35

92

Ich habe eine kleine Webanwendung. Das hat gut funktioniert, bis ich zwei genericHandler in meine Anwendung aufgenommen habe.

Ich habe die folgenden Änderungen für den http-Handler vorgenommen

 <system.web>
    <authentication mode="Forms" >
        <forms protection="All" timeout="720" defaultUrl="Default.aspx" loginUrl="Login.aspx" >
        </forms>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>
    <compilation debug="true" targetFramework="4.0" />

    <httpHandlers>
        <!--Code Log Handler-->
        <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendOWA" path="SendOWA.ashx" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendSOS" path="SendSOS.ashx" />
    </httpHandlers>
    <customErrors mode="Off">
        <error statusCode="404" redirect="Templates/PageNotFound.html" />
    </customErrors>
</system.web>
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <!--Code Log Handler-->
        <add name="LogHandler1" path="SendOWA.ashx" verb="*" type="InfoDomeNewUI.Handler.SendOWA"/>
        <!-- SMS SENDER-->
        <add name="SendSOS" path="SendSOS.ashx" verb="*" type="InfoDomeNewUI.Handler.SendSOS"/>
    </handlers>
</system.webServer>

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.

Ich benutze asp.net4.0 und C #. Ich verwende MVC nicht.
Auf dem lokalen Host funktioniert es einwandfrei.
Aber wenn ich den veröffentlichten Code hoste, gibt es mir den obigen Fehler.

Stapelverfolgung: -

[FileNotFoundException: Datei oder Assembly 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Das System kann die angegebene Datei nicht finden.] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register () +0

[InvalidOperationException: Die Initialisierungsmethode Start vor der Anwendung Start vom Typ System.Web.Http.WebHost.PreApplicationStartCode hat eine Ausnahme mit der folgenden Fehlermeldung ausgelöst: Datei oder Assembly 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, konnte nicht geladen werden. Kultur = neutral, PublicKeyToken = 31bf3856ad364e35 'oder eine seiner Abhängigkeiten. Das System kann die angegebene Datei nicht finden.] System.Web.Compilation.BuildManager.InvokePreStartInitMethods (ICollection`1-Methoden) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465 System.Web.Hosting.HostingEnvironment.nvironment. ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters HostingParameters, PolicyLevel policyLeve

[HttpException (0x80004005): Die Initialisierungsmethode Start vor der Anwendung Start vom Typ System.Web.Http.WebHost.PreApplicationStartCode hat eine Ausnahme mit der folgenden Fehlermeldung ausgelöst: Datei oder Assembly 'Microsoft.Web.Infrastructure, Version = 1.0 konnte nicht geladen werden .0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'oder eine seiner Abhängigkeiten. Das System kann die angegebene Datei nicht finden.] System.Web.HttpRuntime.FirstRequestInit (HttpContext-Kontext) +11697760 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext-Kontext) +141 System.Web.HttpRuntime. +4866485

शेखर
quelle
1
Die Installation von Microsoft.Web.Infrastructure.dll aus dem Nuget-Paket hat bei mir funktioniert.
ATUL SHARMA

Antworten:

197

Es scheint, dass Microsoft.Web.Infrastructure.dll nicht im GAC installiert wird, selbst wenn .net (4.0 oder 4.5 oder andere) erfolgreich unter Windows Server installiert wurde. Auf localhost (normalerweise Windows-Client) scheint es sich im GAC zu befinden, wenn die Tools / Plattform (Visual Studio usw.) installiert sind.

Versuchen Sie als mögliche Lösung Folgendes:

  1. Führen Sie den folgenden Befehl in der Package Manager-Konsole aus. (Wenn Sie Visual Studio verwenden, können Sie dies über die Menüoptionen "Extras -> Bibliothekspaket-Manager -> Paketmanager-Konsole :) erreichen.

    PM> Install-Package Microsoft.Web.Infrastructure

    Die folgenden Meldungen werden angezeigt, wenn die Installation erfolgreich war.

    Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
    Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
  2. Sie werden das bemerken Microsoft.Web.Infrastructure.dll jetzt als Referenz hinzugefügt wurde (im Referenzordner Ihres Projekts im Projektmappen-Explorer zu sehen).

  3. Wenn Sie sich die Eigenschaften dieser Referenz ansehen, werden Sie feststellen, dass " Lokal kopieren " " standardmäßig auf " Wahr " gesetzt ist.

  4. Wenn Sie nun Ihr Projekt "veröffentlichen", wird Microsoft.Web.Infrastructure.dll bereitgestellt.

Rockyb
quelle
2
Danke, das hat mein Problem gelöst! Ich habe in meiner Webforms-Anwendung einen WebApi-Controller verwendet und die Bereitstellung ist aufgrund der genannten Fehlermeldung fehlgeschlagen. Durch Hinzufügen des Verweises zu meinem Projekt und Kopieren über die DLL konnte ich es zum Laufen bringen.
Magnattic
1
Anfangs habe ich versucht, die Benutzeroberfläche "NuGet-Pakete für diese Lösung verwalten" zu verwenden, aber es wurde lediglich angegeben, dass Microsoft.Web.Infrastructure.dll bereits installiert war, obwohl ich nirgendwo einen Verweis darauf sehen konnte. Durch Ausführen Ihrer Befehlszeile konnte ich übertrieben installieren, eine Referenz anzeigen, lokal kopieren, erneut bereitstellen ... behoben. Vielen Dank!!
Hardba11
1
Ich habe mit Package Manager installiert, aber es wurde bereits installiert. Aber ich konnte die Referenz zum Projekt nicht sehen. Also habe ich selbst hinzugefügt und Copy Local auf True gesetzt =)
Akira Yamamoto
27
Beachten Sie, dass in einigen Fällen die Meldung "Webapp hat bereits einen Verweis auf 'Microsoft.Web.Infrastructure 1.0.0.0'." Angezeigt wird. Verwenden Sie in diesen Fällen "Update-Package Microsoft.Web.Infrastructure -Reinstall".
Robba
1
Ich hatte es bereits installiert, aber 'Copy Local' wurde auf false gesetzt. Das Ändern auf true hat das Problem behoben! Vielen Dank
Lyall
19

Ich habe MVC4 über WPI installiert und es hat mir geholfen.

Alex Shyba
quelle
1
Dieser funktionierte für mich, da mein Problem auf dem Server, aber nicht auf meinem Computer lag.
John
14

Ich hatte das gleiche Problem. Als ich die akzeptierte Antwort (rockyb) ausprobierte, erhielt ich die Meldung, dass das Paket bereits installiert und meinem Projekt zugewiesen wurde. Als ich die Referenzliste überprüfte, wurde sie jedoch NICHT referenziert.

Die Microsoft.Web.Infrastructure wurde im Paketordner meiner Lösung installiert. Anstatt NuGet zum Hinzufügen des Pakets zu verwenden, habe ich nur die Option Referenz hinzufügen verwendet. Auf der linken Seite des Popup-Fensters habe ich Durchsuchen ausgewählt und dann die Schaltfläche Durchsuchen unten im Fenster gedrückt. Ich navigierte zu dem Paketordner unter dem Ordner, in dem sich meine Lösung befand, und führte einen Drilldown zu ... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 durch und klickte auf Microsoft.Web.Infrastructure .dll. Nachdem Sie auf OK geklickt haben, wurde das Paket in meiner Referenzliste angezeigt. Ich habe die Option Web Deploy Package verwendet, um meine Website bereitzustellen, und alles hat funktioniert.

Glenn Gordon
quelle
1
Geld. Da diese Antwort so aktuell ist und die akzeptierte (die auch bei mir nicht funktioniert hat) so alt ist, gehe ich davon aus, dass dies etwas mit einer aktualisierten Version von Visual Studio zu tun hat. Vielen Dank!
ChiliNUT
1
Wie Robba in einem Kommentar zu einer anderen Antwort sagte, können Sie das Problem lösen, dass es nicht in der Referenzliste enthalten ist (aber das Paket installiert ist): "Update-Package Microsoft.Web.Infrastructure -Reinstall". Ich denke, das ist besser, als nach der Baugruppe zu suchen.
Jim W sagt, Monica
9

Kopieren Sie die Datei Microsoft.Web.Infrastructure.dll manuell in den Server-BIN-Ordner. Das funktioniert für. Mein Projekt ist VS2010 Website.

Diese Datei kann gefunden werden:

C: \ Programme (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40

Kopieren Sie es einfach und fügen Sie es in den BIN-Ordner ein.

Sie müssen dies wahrscheinlich in die web.config aufnehmen, wenn Sie es noch nicht haben

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Referenz: http://thedeveloperblog.com/

BenW
quelle
6

Ich habe das Problem gefunden. Anstatt versehentlich eine Klassendatei hinzuzufügen, (.cs)hatte ich eine Web API ControllerKlasse hinzugefügt, die meiner Lösung eine Konfigurationsdatei hinzufügte. Und diese Konfigurationsdatei suchte nach der erwähnten DLL (Microsoft.Web.Infrastructure 1.0.0.0). Es hat funktioniert, als ich diese Datei entfernt, die Anwendung bereinigt und dann veröffentlicht habe.

शेखर
quelle
4

Nach der Installation von Microsoft.Web.Infrastructure durch Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Kopieren Sie das Microsoft.Web.Infrastructure.dllmanuell aus dem Nuget-PackageOrdner Ihrer Webanwendung und fügen Sie es dann in den Ordner bin Ihrer Webanwendung ein, die auf dem Webserver bereitgestellt wird.

Pakete \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll

Es hat bei mir funktioniert.

Gokulnath
quelle
Deinstallieren Sie das Paket Microsoft.Web.Infrastructure (überprüfen Sie dann alle Änderungen, wenn Sie Team Foundation Server verwenden), und installieren Sie das Paket Microsoft.Web.Infrastructure für mich.
GJKH
3
Manchmal ist Hack der einzige Weg, um ein Microsoft-Produkt zum
Laufen
Das hat auch bei mir funktioniert. Ja, es war ein Hack, aber es hat viel Zeit gespart. Wie es automatisch aus dem
Papierkorb
4

Update-Package -reinstall Microsoft.Web.Infrastructure hat bei mir nicht funktioniert, da ich immer wieder Fehler erhielt, dass es bereits installiert war.

Ich musste zum Ordner Microsoft.Web.Infrastructure.1.0.0.0 im Paketordner navigieren und diesen Ordner manuell löschen.

Danach wird Install-Package Microsoft.Web.Infrastructurees ausgeführt.

Hinweis: CopyLocalwurde automatisch auf true gesetzt.

Kontaktmatt
quelle
hat in meinem Fall nicht funktioniert. Ich lösche Infrastruktur-Ordner aus Paketen und installierte Paket wieder
Heemanshu Bhalla
0

Ich hatte das gleiche Problem und die "Microsoft.Web.Infrastructure.dll" schien zu fehlen. Ich habe einige Ratschläge ausprobiert und MVCs usw. installiert, und nichts hat geholfen. Die Lösung bestand darin, "Web Services Enhancements (WSE) 1.0 SP1 für Microsoft .NET" zu installieren, das Microsoft.Web.Infrastructure.dll enthält. Verfügbar unter: http://www.microsoft.com/en-gb/download/details.aspx?id=4065

Zly-Zly
quelle
0

Ich hatte das gleiche Problem. Ich habe versucht, Visual Studio 2010 SP1 zu installieren, aber es hat nicht funktioniert.

Schließlich bekomme ich Microsoft.Web.Infrastructure.dll vom Kollegen. Sie finden die DLL auf dem PC Ihres Freundes, auf dem das Projekt perfekt funktioniert. Versuchen Sie, die DLL in temporäre / temporäre ASP.NET-Dateien zu durchsuchen. Gehen Sie mit% temp% in das Ausführungsfenster zu Temp.

Nachdem Sie die DLL in Ihren PC eingegeben haben, fügen Sie einfach einen Verweis auf Ihr Projekt hinzu, und es wird funktionieren.

Ankit
quelle
0

Durch die erneute Veröffentlichung der Website wurde das Problem für mich behoben.

PhillyNJ
quelle
0

War mit dem gleichen Problem konfrontiert und leider funktionierte hier nichts. Schließlich bin ich auf diesen Link gestoßen : https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/

Es stellt sich heraus, dass die Lösung irgendwie dumm ist: Setzen Sie copy-local für die DLL microsoft.web.infrastructure auf False und setzen Sie sie dann wieder auf True.

Ich denke übrigens, es gibt zwei Versionen der DLL microsoft.web.infrastructure, eine, die im GAC vorinstalliert ist, und eine andere, die jetzt ein Nuget-Paket ist. Ich denke, einer maskiert den anderen und verursacht Probleme. In meinem speziellen Fall muss es auf meinem Build-Server in einen Ordner kopiert werden (dieser Ordner wird dann komprimiert und an die Bereitstellung gesendet). Ich denke, das System hatte eine Kopie vor Ort und dachte nur "nee, es wird gut"

information_interchange
quelle
0

Ich habe eine Website nur für Dateien. MVC 5 zur Webforms-Anwendung hinzugefügt (Targeting net45). Ich musste die packages.config ändern

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45"

zu

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" developmentDependency="true"

Damit es auf der lokalen Box im Debug-Modus gestartet werden kann (hatte zuvor den oben beschriebenen Fehler). Ausführen von VS 2017 unter Windows 7 ... geöffnet über Datei> Öffnen> Website> Datei (Stammverzeichnis außerhalb von IIS auswählen).

Beau
quelle
0

Ich hatte das gleiche Problem, nachdem ich einige NuGet-Pakete aktualisiert hatte.
Ich habe alle hier beschriebenen Arten des Löschens, Reinigens, Neuinstallierens und darüber hinaus ohne Erfolg versucht. Die Referenzen hatten keine Microsoft.Web.Infrastructure, obwohl der NuGet-Manager zeigte, dass sie installiert waren.

Das Problem wurde durch Ersetzen gelöst:

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

mit

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

in packages.config. Der Schuldige ist anscheinend "net45".

Hong
quelle