Laden...

Assembly-Verfügbarkeit prüfen? (File.Exists & GAC)

Erstellt von Levitas vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.874 Views
L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 13 Jahren
Assembly-Verfügbarkeit prüfen? (File.Exists & GAC)

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

2.298 Beiträge seit 2010
vor 13 Jahren

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 |

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 13 Jahren

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

3.971 Beiträge seit 2006
vor 13 Jahren

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...

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 13 Jahren

Das mag ja sein, aber... 18 Assemblies zu laden, dauert auch seine Zeit... Gibt es denn keinen anderen Weg? 😦

Lg Marc

S
401 Beiträge seit 2008
vor 13 Jahren

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?

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 13 Jahren

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

99 Beiträge seit 2006
vor 13 Jahren

mach mal eine config datei wo alle themes aufgelistet sind, geht es so?

3.971 Beiträge seit 2006
vor 13 Jahren

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...

Gelöschter Account
vor 13 Jahren

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.

1.815 Beiträge seit 2005
vor 13 Jahren

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 🙁

3.971 Beiträge seit 2006
vor 13 Jahren

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...

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 13 Jahren

Gut, ich werde jetzt einmal ein paar verschiedene Varianten testen, mal schauen was dabei rauskommt...

Ich gebe dann Bescheid,

Mfg Marc

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 13 Jahren

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