Ein WinForm .NET-Programm, das ich vor einiger Zeit geschrieben habe. Da es auf viele Bibliotheksdateien verweist, diese Bibliotheksdateien jedoch kürzlich hinsichtlich einiger Fehler und Algorithmen korrigiert wurden. An der Hauptprogrammdatei wurde jedoch nicht viel geändert. Es ist also nicht so, als würde man das Hauptprogramm neu kompilieren. Daher wurden alle neuen Versionen der DLL-Dateien in das laufende Verzeichnis kopiert, in der Hoffnung, dass das Hauptprogramm die neue Version der Bibliotheksdatei direkt aufrufen kann. Es stellte sich heraus, dass diese Bibliotheksdateien mit Strong Name signiert waren. Sobald das Hauptprogramm aufgerufen wird, tritt ein Fehler auf, der besagt, dass die Datei dieser Version nicht gefunden werden kann.
Später habe ich MSDN überprüft und festgestellt, dass es ausreicht, nur den Laufzeitknoten zur Konfiguration hinzuzufügen.
<Laufzeit>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyAssembly"
publicKeyToken="2b7c3a3291de04"
culture="neutral" />
<bindingRedirect oldVersion="3.0.0.8"
newVersion="4.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Voraussetzung dafür ist jedoch, dass die PublicKeyToken der beiden DLLs gleich sind, also mit derselben sn-Datei signiert sein müssen.
Wenn Ihre Bibliotheksdatei überhaupt nicht mit Strong Name signiert ist, müssen Sie sich natürlich nicht um Versionsprobleme kümmern.