Après la mise à niveau de mon projet d'Autofac 2.6.3.862 à 3.4.0.0, l'erreur suivante s'est produite: Je n'ai même pas ajouté de référence à Autofac 3.3.0.0 dans les projets en solution.
=== Pre-bind state information ===
LOG: DisplayName = Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da
(Fully-specified)
LOG: Appbase = file:///C:/Projects/Drive/temp/drive/Src/Web/
LOG: Initial PrivatePath = C:\Projects\Drive\temp\drive\Src\Web\bin
Calling Assembly : Autofac.Configuration, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\Drive\temp\drive\Src\Web\web.config
LOG: Using Host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da
LOG: Attempting download of new URL file:///c:/temp/root/79371609/925ee10/Autofac.DLL.
LOG: Attempting download of new URL file:///c:/temp/root/79371609/925ee10/Autofac/Autofac.DLL.
LOG: Attempting download of new URL file:///C:/Projects/Drive/temp/drive/Src/Web/bin/Autofac.DLL.
WRN: Comparing the Assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of Assembly (hr = 0x80131040). Probing terminated.
Stack Trace:
[FileLoadException: Could not load file or Assembly 'Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)]
Fairfax.Classifieds.Drive.Web.Global.RegisterTypesWithAutofac() in c:\Projects\Drive\temp\drive\Src\Web\Global.asax.cs:375
Fairfax.Classifieds.Drive.Web.Global.Application_Start(Object sender, EventArgs e) in c:\Projects\Drive\temp\drive\Src\Web\Global.asax.cs:102
[HttpException (0x80004005): Could not load file or Assembly 'Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9936485
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296
[HttpException (0x80004005): Could not load file or Assembly 'Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9950728
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254
UPDATE: J'ai également ajouté la liaison de redirection de l'assembly à web.config, mais il y avait toujours une erreur.
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="5.2.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" />
<bindingRedirect oldVersion="1.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
J'ai également essayé d'ajouter Autofac 3.3.0.0 à GAC, mais ce n'était pas efficace.
Vous avez probablement besoin d'une redirection de liaison dans votre web.config. Mine, pour la version 3.5, ressemble à:
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
J'ai eu ce problème avec une bibliothèque de test unitaire que j'ai migré des anciennes versions XAML vers les nouvelles versions vNext. J'avais configuré la redirection de liaison de version Assembly pour toutes les bibliothèques utilisant AutoFac. J'ai toujours fini avec le problème dans la sortie.
J'ai finalement découvert que les informations de redirection de liaison ne sont générées qu'en sortie (dans le dossier bin
) du fichier DLL correspondant au projet, et non de toutes les autres DLL incluses. Dans mon cas, j'avais une référence à une autre bibliothèque (test unitaire) qui nécessitait également AutoFac. Cette bibliothèque contenait des tests unitaires qui ont également été détectés par le processus de construction et ont échoué lors de leur exécution. Le problème était que les redirections de liaison définies dans la bibliothèque référencée n'étaient pas appliquées car le fichier .config de la bibliothèque référencée n'était pas présent dans le dossier bin
.
J'ai donc résolu ce problème en ne faisant pas référence aux bibliothèques de tests unitaires. En guise de solution de contournement, utilisez un projet de code commun ou une bibliothèque de projets C # commune pour le code courant.
Pour plus d’informations sur les raisons pour lesquelles la liaison d’assemblage est requise pour AutoFac, cliquez ici: Pourquoi tous les packages Autofac ne ciblent-ils pas le dernier noyau Autofac?
Le fichier <role name>.dll.config
doit être ajouté à votre solution (même niveau que web.config ou app.config) et la propriété Copier dans le répertoire de sortie doit être définie sur «Copier toujours». Ce fichier doit contenir les paramètres bindingRedirect
. J'ai eu la même erreur: FileLoadException: impossible de charger le fichier ou l'assembly dans WebRole (instance de recyclage)
Plus d'informations sur Recyclage des rôles des services Cloud avec l'erreur «System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly»