Ich verwende NHibernate 2.1.2.400, das auf log4net 1.2.10.0 verweist. Im selben Projekt verwende ich auch das SDK für die einfache Buchhaltung. Leider wird immer noch log4net 1.2.9.0 verwendet.
So kann ich NHibernate zum Laufen bringen, wenn ich auf log4net 1.2.10.0 verweise, aber das simplySDK nicht funktioniert. Und umgekehrt...
Ich vermute, die meisten Probleme sind darauf zurückzuführen, dass log4net seinen Assembly-Schlüssel geändert hat. Ich habe erfolglos versucht, eine Bindungsumleitung zu verwenden: Die beiden DLLs haben nicht denselben Schlüssel.
Ich denke darüber nach, NHibernate neu zu kompilieren, um log4net 1.2.9.0 zu verwenden, aber es scheint falsch zu sein, und ich habe das Gefühl, dass Simply Accounting das SDK nicht so schnell aktualisiert, um log4net 1.2.10.0 zu verwenden.
Was ist der beste Weg, um damit umzugehen? Ist es überhaupt möglich zu lösen?
quelle
href
Attribut scheint den Trick zu tun. Vielen Dank für den Hinweis!Antworten:
Ich fand die Lösung, indem ich diese Antwort auf eine ähnliche Frage verwendete
Sie erstellen in Ihrem Projekt zwei Ordner, einen für jede Version von log4net. Platzieren Sie jede log4net.dll in ihrem entsprechenden Ordner, indem Sie die Datei zur Lösung hinzufügen (nicht mit Verweis hinzufügen). Sie können festlegen, dass die Eigenschaft "Kopie auf Ausgabeverzeichnis" immer kopiert wird, damit sie beim Erstellen automatisch in den Ausgabeordner kopiert wird.
Anschließend ändern Sie die Datei app.config, indem Sie Folgendes hinzufügen:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" /> <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" /> <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" /> <codeBase version="1.2.11.0" href="log4net.dll" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
Sie können das Token für den öffentlichen Schlüssel einer Assembly mithilfe von sn -T [AssemblyName] abrufen.
quelle
Sie können der Registrierung einen Ausschluss hinzufügen. Fügen Sie einfach diese Schlüssel hinzu:
HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,681549d62126b7b8 HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,1b44e1d426115821 HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,669e0ddf0bb1aa2a
Dadurch wird die .net-Laufzeitüberprüfung für die aufgelisteten Assemblys übersprungen. Theoretisch ist dies ein Sicherheitsproblem, aber da der private Schlüssel ohnehin offen ist, gibt es kaum Auswirkungen.
quelle
Wenn die Bindungsumleitung nicht funktioniert und das SDK für die einfache Abrechnung eine geschlossene Quelle ist, besteht eine mögliche Lösung darin, NHibernate neu zu kompilieren, um log4net 1.2.9.0 zu verwenden.
quelle