Erreur Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35

92

J'ai une petite application Web. Ce qui fonctionnait bien jusqu'à ce que j'ajoute deux genericHandler dans mon application.

J'ai apporté les modifications suivantes au gestionnaire http

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

J'utilise asp.net4.0 et C #. Je n'utilise pas MVC
sur l'hôte local, cela fonctionne bien.
Mais lorsque j'héberge le code publié, cela me donne l'erreur ci-dessus.

Trace de la pile:-

[FileNotFoundException: impossible de charger le fichier ou l'assembly 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. Le système ne trouve pas le fichier spécifié.] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register () +0

[InvalidOperationException: La méthode d'initialisation de démarrage avant application Start on type System.Web.Http.WebHost.PreApplicationStartCode a levé une exception avec le message d'erreur suivant: Impossible de charger le fichier ou l'assembly 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 'ou l'une de ses dépendances. Le système ne trouve pas le fichier spécifié.] System.Web.Compilation.BuildManager.InvokePreStartInitMethods (méthodes ICollection`1) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465 System.Web.Hosting.HostingEnvironment ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hébergementParamètres, PolicyLevel policyLeve

[HttpException (0x80004005): La méthode d'initialisation de démarrage de pré-application Start on type System.Web.Http.WebHost.PreApplicationStartCode a levé une exception avec le message d'erreur suivant: Impossible de charger le fichier ou l'assembly 'Microsoft.Web.Infrastructure, Version = 1.0 .0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié ..] System.Web.HttpRuntime.FirstRequestInit (contexte HttpContext) 11697760 System.Web.HttpRuntime.EnsureFirstRequestInit (contexte HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wr, HttpContext contexte) +4866485

शेखर
la source
1
L'installation de Microsoft.Web.Infrastructure.dll à partir du package nuget a fonctionné pour moi.
ATUL SHARMA

Réponses:

197

Il semble que Microsoft.Web.Infrastructure.dll n'est pas installé dans le GAC, même si .net (4.0 ou 4.5 ou autre) est installé avec succès sur Windows Server. Sur localhost (généralement un client Windows), il semble qu'il se trouve dans le GAC lorsque les outils / la plate-forme (Visual Studio, etc.) sont installés.

Comme solution possible, essayez ce qui suit:

  1. Exécutez la commande suivante dans la console du gestionnaire de package. (Si vous utilisez Visual Studio, cela peut être atteint via les options de menu "Outils -> Gestionnaire de package de bibliothèque -> Console du gestionnaire de package :)

    PM> Install-Package Microsoft.Web.Infrastructure

    Vous verrez les messages suivants s'il est correctement installé.

    Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
    Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
  2. Vous remarquerez que Microsoft.Web.Infrastructure.dll a maintenant été ajouté en tant que référence (peut être vu dans le dossier des références de votre projet dans l'Explorateur de solutions)

  3. Si vous regardez les propriétés de cette référence, vous remarquerez que " Copier Local " a été défini sur " True " par défaut.

  4. Désormais, lorsque vous «publiez» votre projet, Microsoft.Web.Infrastructure.dll sera déployé.

rockyb
la source
2
Merci, cela a résolu mon problème! J'utilisais un contrôleur WebApi dans mon application Webforms et le déploiement a échoué en raison du message d'erreur mentionné. En ajoutant la référence à mon projet et en copiant le fichier .dll, j'ai pu le faire fonctionner.
magnattic
1
Au départ, j'ai essayé de passer par l'interface «Gérer les packages NuGet pour cette solution», mais cela disait simplement que Microsoft.Web.Infrastructure.dll était déjà installé, même si je ne pouvais pas voir de référence à celui-ci nulle part. En exécutant votre ligne de commande, j'ai pu installer par-dessus, voir une référence, définie pour copier local, redéployé ... corrigé. Merci!!
hardba11
1
J'ai installé avec Package Manager mais il était déjà installé. Mais je n'ai pas pu voir la référence sur le projet. J'ai donc ajouté par moi-même et défini Copy Local sur True =)
Akira Yamamoto
27
Notez que dans certains cas, vous obtenez le message «Webapp a déjà une référence à« Microsoft.Web.Infrastructure 1.0.0.0 ».». Utilisez "Update-Package Microsoft.Web.Infrastructure -Reinstall" dans ces cas.
Robba
1
Je l'avais déjà installé mais 'Copy Local' était défini sur false. Le changer en vrai l'a corrigé! Merci
Lyall
19

J'ai installé MVC4 via WPI et cela m'a aidé.

Alex Shyba
la source
1
Celui-ci a fonctionné pour moi car mon problème était sur le serveur mais pas sur ma machine.
John
14

J'ai eu le même problème. Lorsque j'ai essayé la réponse acceptée (rockyb), j'ai reçu le message que le package était déjà installé et affecté à mon projet. Quand j'ai vérifié la liste de références, elle n'était PAS référencée, cependant.

Microsoft.Web.Infrastructure a été installé dans le dossier packages de ma solution. Au lieu d'utiliser NuGet pour ajouter le package, j'ai simplement utilisé l'option Ajouter une référence. Sur le côté gauche de la fenêtre contextuelle, j'ai choisi Parcourir, puis j'ai appuyé sur le bouton Parcourir en bas de la fenêtre. J'ai navigué jusqu'au dossier packages sous le dossier dans lequel se trouvait ma solution, puis j'ai exploré le ... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 et j'ai cliqué sur Microsoft.Web.Infrastructure .dll. Après avoir cliqué sur OK, le package est apparu dans ma liste de références. J'ai utilisé l'option Web Deploy Package pour déployer mon site Web et tout a fonctionné.

Glenn Gordon
la source
1
Argent. Étant donné que cette réponse est si récente et que l'acceptation (qui n'a pas fonctionné pour moi non plus) est si ancienne, je suppose que cela a quelque chose à voir avec une version mise à jour de Visual Studio. Merci!
chiliNUT
1
Comme Robba l'a dit dans un commentaire sur une réponse différente, vous pouvez résoudre le problème de ne pas être dans la liste des références (mais le package est installé) avec: "Update-Package Microsoft.Web.Infrastructure -Reinstall". Je pense que c'est mieux que de parcourir l'assemblage.
Jim W dit de réintégrer Monica
9

Pourquoi ne pas copier manuellement le fichier Microsoft.Web.Infrastructure.dll dans le dossier BIN du serveur. Cela fonctionne pour. Mon projet est le site Web VS2010.

Ce fichier peut être localisé:

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

Copiez-le et collez-le simplement dans le dossier BIN.

Vous devrez probablement l'inclure dans le fichier web.config si vous ne l'avez pas déjà

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

Référence: http://thedeveloperblog.com/

BenW
la source
6

J'ai trouvé le problème. Au lieu d'ajouter un (.cs)fichier de classe par erreur, j'avais ajouté une Web API Controllerclasse qui ajoutait un fichier de configuration dans ma solution. Et ce fichier de configuration recherchait la DLL mentionnée (Microsoft.Web.Infrastructure 1.0.0.0). Cela a fonctionné lorsque j'ai supprimé ce fichier, nettoyé l'application, puis publié.

शेखर
la source
4

Après avoir installé Microsoft.Web.Infrastructure via Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Copiez le Microsoft.Web.Infrastructure.dllmanuellement à partir du Nuget-Packagedossier de votre application Web, puis collez-le dans votre dossier bin de votre application Web déployée sur le serveur Web.

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

Cela a fonctionné pour moi.

Gokulnath
la source
Uninstall-Package Microsoft.Web.Infrastructure (puis vérifiez toutes les modifications si vous utilisez Team Foundation Server) puis Install-Package Microsoft.Web.Infrastructure a fonctionné pour moi.
GJKH
3
Parfois, le piratage est le seul moyen de faire fonctionner un produit Microsoft
eagor
Cela a fonctionné pour moi aussi. oui c'était un hack mais ça a fait gagner beaucoup de temps. comment il est automatiquement supprimé de la poubelle est un mystère
Heemanshu Bhalla
4

Update-Package -reinstall Microsoft.Web.Infrastructure n'a pas fonctionné pour moi, car je continuais à recevoir des erreurs indiquant qu'il était déjà installé.

J'ai dû accéder au dossier Microsoft.Web.Infrastructure.1.0.0.0 dans le dossier packages et supprimer manuellement ce dossier.

Après cela, l'exécution l'a Install-Package Microsoft.Web.Infrastructureinstallé.

Remarque: a CopyLocalété automatiquement défini sur true.

contactmatt
la source
n'a pas fonctionné dans mon cas. Je supprime à nouveau le dossier d'infrastructure des packages et le package
installé
0

J'ai eu le même problème et le "Microsoft.Web.Infrastructure.dll" semblait manquer. J'ai essayé quelques conseils et installé MVC, etc. et rien n'a aidé. La solution consistait à installer «Web Services Enhancements (WSE) 1.0 SP1 pour Microsoft .NET» qui inclut Microsoft.Web.Infrastructure.dll. Disponible sur: http://www.microsoft.com/en-gb/download/details.aspx?id=4065

Zly-Zly
la source
0

J'ai eu le même problème. J'ai essayé d'installer Visual Studio 2010 SP1 mais cela n'a pas fonctionné.

Enfin, j'obtiens Microsoft.Web.Infrastructure.dll du collègue. Vous pouvez trouver la dll dans le PC de vos amis où le projet fonctionne parfaitement. Essayez de rechercher dll dans les fichiers temporaires / temporaires ASP.NET. Accédez à Temp en utilisant% temp% dans la fenêtre d'exécution.

Après avoir installé dll dans votre PC, ajoutez simplement une référence à votre projet et cela fonctionnera.

Ankit
la source
0

La republication du site a résolu le problème pour moi.

PhillyNJ
la source
0

Était confronté au même problème et malheureusement rien ici ne fonctionnait. Enfin, je suis tombé sur ce lien: https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/

Il s'avère que la solution est un peu stupide: définissez Copy-Local pour la dll microsoft.web.infrastructure sur False, puis redéfinissez-la sur True.

Au fait, je pense que ce qui se passe, c'est qu'il existe deux versions de la dll microsoft.web.infrastructure, une pré-installée dans le GAC et une autre qui est maintenant un package nuget. Je pense que l'un masque l'autre, ce qui pose des problèmes. Dans mon cas particulier, sur mon serveur de build, j'ai besoin qu'il soit copié dans un dossier (ce dossier est ensuite compressé et envoyé au déploiement). Je suppose que le système en avait une copie localement et je pensais simplement "non, ça ira"

information_interchange
la source
0

J'ai un site Web contenant uniquement des fichiers. Ajout de MVC 5 à l'application Webforms (ciblant net45). J'ai dû modifier le packages.config

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

à

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

pour qu'il démarre sur la boîte locale en mode débogage (avait précédemment l'erreur décrite en haut). Exécution de VS 2017 sur Windows 7 ... ouvert via Fichier> Ouvrir> Site Web> Fichier (choisissez le répertoire racine en dehors d'IIS).

Beau
la source
0

J'ai eu le même problème après la mise à niveau d'un tas de packages NuGet.
J'ai essayé toutes sortes de suppression, de nettoyage, de réinstallation décrites ici et sans résultat. Les références n'avaient pas Microsoft.Web.Infrastructure bien que le gestionnaire NuGet ait montré qu'il était installé.

Le problème a été résolu en remplaçant:

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

avec

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

dans packages.config. Le coupable est apparemment "net45".

Hong
la source