Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Assembly-Verfügbarkeit prüfen? (File.Exists & GAC)
Levitas
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2358

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Levitas
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 4055
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Levitas
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

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

Lg Marc
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

beantworten | zitieren | melden

Servus,

ähmm
Zitat von Levitas
...Dazu möchte ich einfach wissen, ob ein Assembly, wie und wo auch immer es gerade liegt/geladen ist, verfügbar ist....
Zitat von Levitas
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?
private Nachricht | Beiträge des Benutzers
Levitas
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

Naja, also ich erkläre jetzt besser mal alles, vllt. ist es ja wirklich einfacher so... :baby:

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
private Nachricht | Beiträge des Benutzers
idzik
myCSharp.de - Member

Avatar #avatar-3034.png


Dabei seit:
Beiträge: 102

beantworten | zitieren | melden

mach mal eine config datei wo alle themes aufgelistet sind, geht es so?
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 4055
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal am .
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 4055
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

Zitat
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...
private Nachricht | Beiträge des Benutzers
Levitas
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

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

Ich gebe dann Bescheid,

Mfg Marc
private Nachricht | Beiträge des Benutzers
Levitas
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers