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.
Errors
Der folgende Error kann beim Compile ausgegeben werden:
#error 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.
#error Resource | Resource 'My.Assembly.Ressource' with version 1.0.1.2 is too low. References from other assemblies requires Version up to 2.0.0.0 (see ...)
Die gefundene Assembly hat eine zu kleine Version. Es gibt in anderen Assemblies Referenzen, die eine höhere Version erwarten. Wenn es sich dabei um eine Ressource handelt, dann muss diese aktualisiert werden.
Dieser Error kann auch dann auftreten, wenn z.B. eine FrameworkStudio-Referenz eine zu alte Version hat. Das kann sein, wenn eine Ressource mit einem zu aktuellen Version-Stand eingebunden wird. In diesem Fall kann für die Ressource ggf. eine ältere Version dieser Assembly verwendet werden, deren Version zu den anderen Assemblies passt. Alternativ können auch aktuellere Versionen der Referenzen als Ressource eingebunden werden.
Warnings
Die folgenden Warnungen können beim Compile ausgegeben werden:
#warning Resource | Resource 'My.Assembly.Ressource' with version 2.0.0.0 is already referenced via FrameworkStudio. The Resource may be deleted. (see ...)
Die eingebundene Ressource wird mit derselben Version bereits eingebunden - z.B. durch FrameworkStudio oder ReferencedAssemblies. Die Ressource sollte deshalb gelöscht werden.
Aktuell ist das kein Problem. Wenn aber zu einem späteren Zeitpunkt FrameworkStudio eine neuere Version einbindet, dann wird es einen Error geben, weil die Ressource dann eine zu kleine Version hätte.
#warning Resource | Referenced Assembly 'My.Assembly.Ressource' not found! References from other assemblies requires Version up to 2.0.0.0. (see ...)
Eine Assembly, welche als Referenz von anderen Assemblies erwartet wird, wurde nicht gefunden. Ggf. muss diese Assembly als Ressource eingebunden werden, oder es muss eine Drittsoftware installiert werden, die diese Assembly im Global Assembly Cache registriert.