ASP.NET MVC essaie de charger version plus ancienne de Owin assemblée

Comme un peu de contexte, je suis l'élaboration d'un ASP.NET MVC 5 application qui utilise OAuth basée sur l'authentification via Microsoft OWIN mise en œuvre, pour Facebook et Google, et seulement à ce stade. Actuellement (v3.0.0, git-commit 4932c2f), le FacebookAuthenticationOptions et GoogleOAuth2AuthenticationOptions ne fournissent pas une propriété de la force de Facebook, ni Google, respectivement, pour authentifier les utilisateurs (par l'ajout de la approprié des paramètres de chaîne de requête) au moment de la signature.

D'abord, j'ai décidé de remplacer les classes suivantes:

  • FacebookAuthenticationOptions
  • GoogleOAuth2AuthenticationOptions
  • FacebookAuthenticationHandler (plus précisément AuthenticateCoreAsync())
  • GoogleOAuth2AuthenticationHandler (plus précisément AuthenticateCoreAsync())

encore découvert que la ~AuthenticationHandler classes sont marqués comme internal.

Alors j'ai tiré une copie de la source pour le Katana projet (http://katanaproject.codeplex.com/) et modifié le source en conséquence.

Après la compilation, j'ai trouvé qu'il y a plusieurs dépendances nécessaires de mise à jour afin d'utiliser ces mises à jour des assemblées (Microsoft.Owin.De sécurité.Facebook et Microsoft.Owin.De sécurité.Google) dans le projet MVC:

  • Microsoft.Owin
  • Microsoft.Owin.Sécurité
  • Microsoft.Owin.De sécurité.Les Cookies
  • Microsoft.Owin.De sécurité.OAuth
  • Microsoft.Owin.De l'hôte.SystemWeb

Cela a été fait par le remplacement de l'existant du projet références à la 3.0.0 versions et mise à jour de ces dans le web.config. Bonne nouvelle: le projet compile correctement.

De débogage, j'ai reçu une exception au démarrage:

Une exception de type 'System.IO.FileLoadException' s'est produite dans [MVC web de l'assemblée].dll, mais n'a pas été traitée dans le code utilisateur

Informations supplémentaires: impossible de charger le fichier ou l'assembly " Microsoft.Owin.De sécurité, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ou une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

L'exception sous-jacente a indiqué que Microsoft.AspNet.L'identité.Owin a été d'essayer de charger v2.1.0 de Microsoft.Owin.Sécurité lors de l'appel de app.UseExternalSignInCookie() de Startup.ConfigureAuth(IAppBuilder app) en Démarrage.Auth.cs.

Malheureusement, que l'assemblée (et ses autres dépendances, Microsoft.AspNet.L'identité.Owin) ne font pas partie du Projet Katana solution, et je ne trouve pas de répertoire accessible pour ces assemblées en ligne.

Sont les Microsoft.AspNet.L'identité assemblées open source, comme le Katana projet?
Est-il un moyen de tromper ceux assemblées à utiliser référencé dans la v3.0.0 assemblées de la place de la v2.1.0? Le /bin dossier contient les 3.0.0 versions de la Owin assemblées.

J'ai mis à jour les packages NuGet pour Microsoft.AspNet.L'identité.Owin, et c'est toujours un problème.

Toutes les idées sur la façon de résoudre ce problème?

On dirait que vous pourriez avoir besoin d'un assembly de redirection de liaison. Jetez un oeil à ce guide: rionscode.wordpress.com/tag/...
Merci, j'ai lu cela et compris que la liaison redirige il parle sont les changements que j'ai faits dans le web.config: <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> j'ai vérifié et vérifié que les assemblys référencés sont en effet 3.0.0.0, mais la question est toujours d'actualité.
avez-vous préciser l'assemblée des noms dans votre liaison de redirection? Vous aurez besoin d'une liaison de redirection pour chaque paquet que vous souhaitez rediriger vers la bonne version. Aussi, avez-vous fait la mise à jour de vos références dans votre projet ou tout simplement remplacer la .dll dans le dossier bin?
Oui, il y a deux de liaison des redirections comme suit: <dependentAssembly> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> j'ai aussi fait en sorte que le projet de référence ont été mis à jour en conséquence.

OriginalL'auteur d_mcg | 2014-06-06