Ich habe gerade ein vorhandenes Projekt auf eine brandneue Maschine kopiert, um mit der Entwicklung zu beginnen, und bin auf ein Problem mit der Version einer meiner Assemblys gestoßen, auf die verwiesen wird (eine Telerik-DLL, wie es passiert).
Das Projekt hat ursprünglich auf eine ältere Version der Assembly verwiesen (nennen wir sie v1.0.0.0). Auf meinem neuen Computer ist die neueste Version der Assembly installiert, daher dachte ich, ich hätte sie aktualisiert (nennen wir die neue Version v2.0.0.0).
Hier ist das Problem: Wenn ich die alte DLL v1.0.0.0 in den Projektordner kopiere und als Referenz hinzufüge, wird die Website problemlos gestartet. Wenn ich diesen Verweis lösche (und auch die alte DLL von meinem System lösche) und die neue Version (v2.0.0.0) hinzufüge, zeigt die Seite die folgende Ausnahme:
Datei oder Assembly 'XXXXXX, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 121fae78165ba3d4' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein. (Ausnahme von HRESULT: 0x80131040)
Der Code sucht eindeutig nach der veralteten Version und kann sie nicht finden. Aber wieso?
Ich habe den Lösungsordner nach dieser Versionsnummer durchsucht und konnte keine einzige Referenz finden. Ich habe den Text der .csproj-Datei überprüft und festgestellt, dass die Version die neueste Version korrekt anzeigt und der HintPath den Pfad zur neuen DLL korrekt anzeigt. Da ich die alte DLL nicht auf dem System installiert habe, wird sie in meinem GAC nicht angezeigt (obwohl v2.0.0.0 dies erwartungsgemäß tut).
Ich habe dann den Fusionsprotokoll-Viewer aktiviert, um herauszufinden, warum er nach dieser alten Version sucht, aber kein Glück:
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.
Alles, was es sagt, ist, dass es damit beginnt, nach dieser alten Baugruppe zu suchen. Ich habe versucht, online eine Lösung zu finden und habe diese ähnliche SO-Frage gesehen , aber es scheint das genaue Gegenteil meines Problems zu sein. Das Programm dieses Fragestellers fand die falsche DLL anstelle der referenzierten. Mein Problem ist, dass das Programm auf mysteriöse Weise nach der falschen DLL sucht und diese nicht finden kann, wenn die richtige lokal im bin-Ordner und im GAC gefunden wird.
Warum sucht ich nach der alten Version? Wo sonst kann ich suchen, um diese schlechte Referenz zu finden?