Hallo Leute!
Ich wollte fragen, ob jemand weiß, wie man die Verfügbarkeit eines Assemblies testet. Dazu möchte ich einfach wissen, ob ein Assembly, wie und wo auch immer es gerade liegt/geladen ist, verfügbar ist. Ob es nun im GAC liegt, oder im selben Verzeichnis wie das ausführende Assembly.
Ich habe dazu keinen Weg gefunden.. gibt es nicht irgendeine Methode, die das kann? Ich möchte dabei keine Fremdbibliotheken benutzen, also "reines .Net"...
Danke im vorraus!
Lg Marc
Bei geladenen Assemblies kannst du dir die Prüfung sowieso sparen. - Wäre sie nicht verfügbar gäbe es eine Exception.
Ansonsten kannst du doch versuchen die Assembly zu laden, funktioniert es, ist sie da ansonsten nicht. -> FileExist() könnte auch als Prüfung reichen, sofern du weist wo die Assembly liegt.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Wenn man 'versucht' zu laden, ist zwangsweise eine try/catch nötig, oder? Das kostet Zeit, wenn man das bei 18 dll's machen muss... File.Exists reicht aber leider nicht für den GAC...
Mfg Marc
Es ist ein weitverbeiterter Irrtum, dass ein Catch viel Zeit kostet. Es wird einfach der Stack hochgegangen, bis ein entsprechender Catch-Block gefunden wird, der der jeweils geworfen Exception entspricht.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Das mag ja sein, aber... 18 Assemblies zu laden, dauert auch seine Zeit... Gibt es denn keinen anderen Weg? 😦
Lg Marc
Servus,
ähmm 🤔
...Dazu möchte ich einfach wissen, ob ein Assembly, wie und wo auch immer es gerade liegt/geladen ist, verfügbar ist....
Das mag ja sein, aber... 18 Assemblies zu laden, dauert auch seine Zeit... Gibt es denn keinen anderen Weg? 😦
Was jetzt. Sind die Bibliotheken bereits geladen, oder was?
Warum möchtest du diese Prüfung durchführen? Was empfiehlt Microsoft?
Un die alles entscheidende Frage, warum machst du dir so grosse Sorgen um die Laufzeit? Handelt es sich hier um Dateien > 100MB?
Naja, also ich erkläre jetzt besser mal alles, vllt. ist es ja wirklich einfacher so... 👶
Es ist so: Ich nutze ein Ribbon-Framework (Elegant UI), und ich hatte bisher eine ComboBox, in der alle Themen aufgelistet sind (insg. sind es 9 Themen), die verfügbar sind. Bisher wurde die Verfügbarkeit immer so überprüft, ob die 2 Dateien (ein Thema hat zwei dll's) existieren. Nun, in letzter Zeit arbeite ich mit diesen Dateien im GAC, da es für das VS (vor allem bezüglich der Toolbox) leichter ist. Dadurch erkennt die ComboBox nun nicht mehr, ob ein Thema verfügbar ist, oder nicht. Und dazu möchte ich nun überprüfen, ob ein Thema in irgendeiner weise verfügbar ist, oder nicht...
Ich hoffe, das war verständlich?^^
Lg Marc
mach mal eine config datei wo alle themes aufgelistet sind, geht es so?
Ein Plugin ist Anwendungsbezogen und gehört nicht in den GAC. Wenn du zur Entwicklung den GAC nutzen möchtest, ist das dein Bier.
Der Weg mit der Config-Datei ist wahrscheinlich die beste Möglichkeit. Dort hätte der User auch die Möglichkeit Plugins zu deaktivieren und du kannst GAC und Programmordner benutzen.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
dein programmcode an die eigenheiten deiner entwicklungsumgebung anzupassen ist schon suboptimal.... oder besser gesagt ziemlich fatal.
dann noch den zielrechner wegen deiner IDE so zu belasten, ist noch viel schlimmer. immerhin muss dann auf dem zielrechner eine installation durchgeführt werden und eine deinstallation muss dann auch irgendwann möglich sein.... wehe wenn der user dann einfach nur löscht...
wenn die themes in extra dll´s liegen, dann ist es doch super einfach. bau dir ein einfaches plugin system und fertig (ohne config datei... denn die kann auch recht komplex mit der zeit werden.. vor allem wenn es dann viele user mit einer unterschiedlichen anzahl an themes gibt und du willst ein update machen....)
ein theme ist für VS sowieso irrelevant. du bruachst nur dein default theme für VS und seinem designer und du bruachst sowieso einen defaulttheme als fallback strategie für die entanwendung. diese können bzw sollten hart referenziert werden. edit: na gut.. hart referenzieren ist so ne sache... jedenfalls sollten die vor usermanipulation rudimentär geschützt sein.. wenn du also einen ordner mit userthemes machst, dann sollte der defaulttheme für die fallback strategie nicht in dem ordner sein.. oder wenn ja, dann sollte er im namen schon deutlich machen, das er notwendig ist.
Hallo!
try-catch kostet kaum Zeit, es kostet eher ohne try-catch Zeit, weil dann der Debugger erstmal den gesamten Stack hochläuft und erst dann merkt, da ist nix. Und wenn man dann noch in der IDE ist, sucht die noch die genaue Fehlerstelle.
Und für dein Problem könnte evtl. Assembly.Load hilfrteich sein, dass schaut soweit ich weis auch im GAC nach.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Assembly.Load hilfrteich sein, dass schaut soweit ich weis auch im GAC nach.
Nur wenn man den vollqualifizierenden Namen (Name, Version, Kultur und PublicKey/Token) angibt.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Gut, ich werde jetzt einmal ein paar verschiedene Varianten testen, mal schauen was dabei rauskommt...
Ich gebe dann Bescheid,
Mfg Marc
Ich hab es jetzt einfach mit einem try/catch bei Assembly.Load gemacht... Was besseres ist mir nicht eingefallen^^ Auf jeden Fall funzt es jetzt, trotzdem danke..
Mfg Marc