Je viens de copier un projet existant à une nouvelle machine pour commencer à développer sur elle et ont eu un problème avec la version de l'un de mes assemblys référencés (un telerik DLL comme il arrive).
Le projet à l'origine référencé une ancienne version de l'assembly (permet de l'appeler v1.0.0.0). Ma nouvelle machine dispose de la dernière version de l'assemblée installé, j'ai donc pensé à jour (appelons la nouvelle version v2.0.0.0).
Maintenant, voici le problème: Si je copie le vieux v1.0.0.0 dll dans le dossier du projet et l'ajouter comme une référence, le site web se lance sans problème. Si je supprime la référence (et aussi de supprimer l'ancienne DLL à partir de mon système) et ajouter la nouvelle version (v2.0.0.0), la page indique l'exception suivante:
Impossible de charger le fichier ou l'assembly "XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4 " ou l'une de ses dépendances. La situé assemblée manifeste définition n' correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)
Clairement, le code est à la recherche pour la sortir de la date de la version et ne peut pas le trouver. Mais pourquoi?
Je greped le dossier de la solution pour que le numéro de version et ne pouvait pas trouver une seule référence. J'ai vérifié le texte de la .csproj dossier et constaté la version montre bien la version la plus récente et la HintPath affiche correctement le chemin d'accès à la nouvelle DLL. En outre, parce que je n'ai pas installer la DLL ancienne sur le système il n'est pas dans mon GAC (si v2.0.0.0 n'a, comme prévu).
J'ai ensuite permis la fusion de la visionneuse de journaux pour essayer de comprendre pourquoi il est à la recherche pour cette ancienne version, mais pas de chance:
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.
=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
Tout ce qu'elle dit il, qu'il commence par la recherche pour cette ancienne assemblée. J'ai essayé de trouver une solution en ligne et vu ce similaire DONC, la question, mais il semble être l'exact opposé de mon problème. Que l'interlocuteur du programme a été de trouver le mauvais DLL au lieu de le référencés. Alors que mon problème est que le programme est mystérieusement à la recherche de mauvais DLL et impossible de le trouver quand le droit peut être trouvé localement dans le dossier bin et dans le GAC.
Pourquoi la mienne est à la recherche pour l'ancienne version? Où puis-je chercher pour trouver cette mauvaise référence?