Referenz-Prüfung für Ressourcen
Framework Studio bringt schon eine ganze Menge eigener Referenzen mit:
- FrameworkStudio - Assemblies die Framework Studio "out of the box" schon mitbringt.
- ReferencedAssemblies - dotnet-Framework Assemblies, die beim Compile verwendet werden.
- GlobalAssemblyCache
Weitere Referenzen können als DLL-Datei mittels Ressource im bin
-Ordner eingebunden werden.
Diese Ressourcen können Konflikte verursachen, wenn sie z.B. FrameworkStudio - Referenzen überschreiben.
Deshalb wird beim Compile der Ressources eine Referenz-Prüfung durchgeführt und gefundene Konflikte und Unstimmigkeiten als #error
oder #warning
ausgegeben.
// Reference Check Results: Resource
#warning Resource 'My.Assembly.Ressource' with lower version 1.0.1.2 overrides FrameworkStudio Reference with higher version 2.0.0.0 (see ...)
Sobald Ressourcen mit einer spezifischen Architektur (32-Bit oder 64-Bit) vorhanden sind, wird pro Architektur eine vollständige Prüfung durchgeführt. Das ist erforderlich, weil sich die Versionen und Referenzen dieser Assemblies unterscheiden könnten. Dadurch werden Errors und Warnungen ggf. mehrmals ausgegeben:
// Reference Check Results: Resource (64 Bit)
#warning Resource (64 Bit) | Resource 'My.Assembly.Ressource' with lower version 1.0.1.2 overrides FrameworkStudio Reference with higher version 2.0.0.0 (see ...)
...
// Reference Check Results: Resource (32 Bit)
#warning Resource (32 Bit) | Resource 'My.Assembly.Ressource' with lower version 1.0.1.2 overrides FrameworkStudio Reference with higher version 2.0.0.0 (see ...)
Neben den Konflikten werden die Details der Referenz-Prüfung als Kommentar in den Code generiert. Wenn Probleme auftreten, lässt sich so auf einfache Weise recherchieren, wie diese zustande kommen.
Treten keine Warnings oder Errors auf, kann man sich diesen Code auch manuell anzeigen lassen. Dazu muss im Namespace FSGeneral.DBTables
der generierte Code für Resources
angezeigt werden.
// Reference Details: Resources (64 Bit)
//
// - Accessibility 4.0.0.0 (ReferencedAssemblies)
// -> mscorlib 4.0.0.0
//
// - AESInterface 1.0.5.9 (Resource)
// -> mscorlib 2.0.0.0
// -> System 2.0.0.0
// -> System.Web.Services 2.0.0.0
// -> System.Xml 2.0.0.0
...
Aufgelistet werden die gefundenen Assemblies mit ihrer tatsächlichen Version. In Klammern ist zu erkennen, woher diese Referenz kommt:
(NotFound)
- Die Assembly wird von einer anderen referenziert, wurde jedoch nicht gefunden.(GlobalAssemblyCache)
- Assemblies die aus dem Global Assembly Cache gezogen werden. Dabei handelt es sich in der Regel um installierte Drittsoftware.(ReferencedAssemblies)
- dotnet-Framework Assemblies, die beim Compile verwendet werden. Diese befinden sich im Programm-Verzeichnis im Unter-OrdnerReferencedAssemblies
(FrameworkStudio)
- Assemblies die Framework Studio "out of the box" schon mitbringt. Dabei handelt es sich um eigene Assemblies und von Framework Studio verwendete Nuget-Pakete.(Resource64Bit)
- eine vom Entwickler eingebundene Ressource für 64-Bit Architektur(Resource32Bit)
- ... für 32-Bit Architektur(Resource)
- ... ohne spezifische Architektur
Unterhalb der Assembly werden jeweils die erwarteten Referenzen mit der jeweils erwarteten Version aufgelistet. Diese Versionen dienen als Basis für die Prüfung der Versionen der tatsächlich verfügbaren Assemblies.
Warnings
Die folgende Warnung kann beim Compile ausgegeben werden:
#warning Resource | Resource 'My.Assembly.Ressource' with lower version 1.0.1.2 overrides FrameworkStudio Reference with higher version 2.0.0.0 (see ...)
Die eingebundene Ressource überschreibt eine bereits von Framework Studio bereitgestellt Assembly mit einer kleineren Version. Dadurch funktionieren Binding-Redirects nicht mehr korrekt und es kann zur Laufzeit zu Exceptions kommen.
Note
Das ist aktuell die einzige Warning, weil diese Situation in der Praxis schon zu Fehlern geführt hat. Es wird empfohlen, die entsprechende Ressource im Service-Release durch eine passende Version zu ersetzen.
Ab Framework Studio 4.7 wird die Prüfung erweitert. Dieser Versions-Konflikt wird dann als Error behandelt und es gibt weitere Warnungen.