Angenommen, ich habe Baugruppen in GAC mit den Versionen 1.1.1.5, 1.1.5.1, 1.1.6.2, 1.2.1.1 und 2.1.2.1. Meine Anwendung hat eine Referenz der Version 1.1.3.0. Welche Assembly wird zur Laufzeit abgeglichen? und was sind die tatsächlichen Regeln für den Assembly-Abgleich?Wie funktioniert die Assembly-Version genau?
Antwort
Wenn Ihre Referenz eine bestimmte Version erfordert, wird sie beim Laden der Baugruppe standardmäßig fehlschlagen, da diese Version nicht existiert.
Dies kann jedoch über Assembly Binding Redirection konfiguriert werden. Es gibt verschiedene Optionen, was hier passiert, einschließlich:
Welche Baugruppe wird zur Laufzeit abgeglichen?
Keine wird gefunden, Ihr Programm wird bombardieren.
Die Dokumentation für die Versionsklasse spricht generisch über, wie Sie Versionsnummern auswählen. Und ja, normalerweise betrachten Sie eine Änderung der Build-Nummer als eine nichtbrechende Änderung. Und eine Änderung der Revision als geringes Risiko. Dinge, die Sie berücksichtigen, wenn Sie eine [AssemblyFileVersion] auswählen.
jedoch die Standard-CLR Politik tut nicht diese Art der Interpretation der [Assembly] umzusetzen, besteht darauf, es auf ein genauen Spiel. Es ist nur glücklich, wenn es genau die DLL findet, mit der Sie Ihr Programm kompiliert haben. Dies ist normalerweise nicht schwierig zu gewährleisten. Sie können diese Richtlinie überschreiben und sie schwächer machen, obwohl Sie immer darüber nachdenken sollten. Es gibt eine sehr lange Geschichte von gut beabsichtigten kleinen Änderungen im Quellcode, die einfach nicht so gut in der Praxis aus. Etwas, das Microsoft zu gut kennt, muss Code beibehalten, der für Jahrzehnte dauert. Die Standard Gegenmaßnahmen gegen DLL Hell in der CLR sind hart wie ein Stein. Wie sie sein sollten. Lass es dir sagen.
Bedeutet Dokumentation bei http://msdn.microsoft.com/en-us/library/system.version.aspx ist falsch. Ich habe dies in Framework 1.1 getestet, es wählt die Version mit nur passend major.minor. Wird es in 4.0 geändert? – user960567
@user Die Dokumentation, die Sie verlinkt haben, widerspricht dieser Antwort nicht. Der Teil, den Sie gerade lesen, befindet sich wahrscheinlich im Abschnitt "Bemerkungen", der über * Konventionen * spricht. Genau das sagt Hans hier im mittleren Absatz.Und wie ein allgemeiner Ratschlag, wenn Sie sich für das Verhalten in alten Frameworks wie 1.1 interessieren, sollte das explizit in Ihrer Frage erwähnt werden. Die Antworten werden tendenziell die aktuelle oder aktuelle-1-Version annehmen. –
- 1. Wie genau funktioniert die Verknüpfung?
- 2. Wie liest man die Assemblyversion von assemblyInfo.cs?
- 3. Wie funktioniert input.nextInt() genau?
- 4. Wie genau funktioniert sockaddr_storage?
- 5. In Funke: Wie funktioniert die Aufteilung genau?
- 6. Wie genau funktioniert die python-Funktion any()?
- 7. Wie genau funktioniert @param - Java
- 8. Wie funktioniert paramiko Channel.recv() genau?
- 9. Wie genau funktioniert von ... importieren ...?
- 10. Wie genau funktioniert mvn -U?
- 11. MaxTenuringThreshold - wie genau es funktioniert?
- 12. wie Abfrage funktioniert nicht genau
- 13. Wie genau funktioniert Docker? (Theorie)
- 14. Wie genau funktioniert Tapestry Mixin?
- 15. Wie genau funktioniert ein Generatorverständnis?
- 16. strptime funktioniert nicht genau
- 17. Wie funktioniert die gcc-Option -stack-check genau?
- 18. Wie genau funktioniert die Druckanweisung in diesen beiden Methoden?
- 19. Wie genau funktioniert diese CodeIgniter-Controller-Klasse?
- 20. genau wie methode funktioniert in java
- 21. Wie funktioniert synchrone und asynchrone Kommunikation genau
- 22. Wie funktioniert 'selbst' in vererbten Klassen genau?
- 23. Tomcat - Wie genau funktioniert der Kontextpfader?
- 24. Wie genau funktioniert AddStretch in QBoxLayout?
- 25. Wie genau funktioniert link rel = "preload"?
- 26. Wie funktioniert JdbcTemplate mit TransactionManager genau?
- 27. Wie genau funktioniert der Doppelstring-Trick?
- 28. Wie funktioniert der Import von Python genau?
- 29. Ich weiß nicht genau, wie .equalsIgnoreCase funktioniert?
- 30. Wie genau setQueryMode von VO funktioniert?
Sind Sie sicher? Weil diese Dokumentation sagt: "Assemblies mit demselben Namen, Major und Minor Versionsnummern, aber verschiedene Revisionen sollen vollständig austauschbar sein" http://msdn.microsoft.com/en-us/library/system.version.aspx – user960567
@ user960567 Ich hatte Bindungs-/Ladefehler, selbst wenn nur die Build-Nummer nicht übereinstimmte. Das ist die Absicht, aber die Richtliniendateien müssen noch existieren. –
Bedeutet dies, dass die Dokumentation nicht korrekt ist? – user960567