C# DLLs
-
@geeky: Ans "reinmergen" hatte ich auch schon gedacht. Aber ich möchte DLLs von Drittherstellern außerhalb legen.
@witte: Was meinst Du mit "dll-Hell", "GAC" und was ist "strongtyped"?
-
@witte: Was meinst Du mit "dll-Hell", "GAC" und was ist "strongtyped"?
Wie wärs wenn Du die Begriffe mal googlen würdest?
-
Also der Google-Hinweis ist nett gemeint. Jedoch ist es heute doch so naheliegend, dass man Antworten im Internet sucht. Das heißt aber auch, dass wenn jemand eine Frage ins Forum stellt, dass der Hinweis auf Google entfallen kann. Eventuell hat der Fragende keine für ihn verstehbaren Erklärungen gefunden. Oder es gibt Typen, die nicht alle Fachbegriffe und deren technischen Erklärungen auf Anhieb verstehen. (Das bedeutet aber nicht, dass solche Typen überhaupt keine Problem lösen können.) Der trockene Google-Hinweis unterstellt dem Fragenden in gewisser Weise, dass eine dumme oder billige Frage gestellt wurde. Ich denke, ein Forum ist zum "Gespräch" gedacht. Selbst wenn die potentiellen Antworter die Frage als total anfängermäßig einschätzen, bedeutet dies doch auch, dass die Antworter die Antwort kennen. Dann wäre es doch hilfreich die Antwort rein zu setzen, als einen "unkreativen Beitrag" zu leisten. Oder?
-
@csofti: Grundsätzlich stimm ich deiner Ausführung zu, aber: Wenn du gesucht hast, könntest du die dementsprechenden Suchseiten hier posten und dann fragen, mit dem Hinweis auf das nicht verstanden, was du in dem Artikel nicht verstanden.
Was die "dumme oder billige" Frage angeht: Ich muss ehrlich sagen ich hab nicht wirklich komplett verstanden was dein Problem ist. Wenn du die lib installiert hast, kannst du die Referenz doch ohne Probleme über Verweise mit einbinden. Wozu der Umweg das in ein extra verzeichnis bei der Auslieferung zu packen? Lass die DLL doch einfach neben deiner Exe liegen.
-
Firefighter schrieb:
Wozu der Umweg das in ein extra verzeichnis bei der Auslieferung zu packen? Lass die DLL doch einfach neben deiner Exe liegen.
Er möchte aber auf der 50 TB Harddisk unbedingt 50 MB sparen
@csofti,
1. Nein, davon kann man leider wirklich nicht ausgehen. Viele Hilfesuchende haben das Gefühl, dass man ihnen alles vorkauen muss. Das ist ziemlich mühsam. Schliesslich sind hier auch alles nur Freiwillige unterwegs, welche auch nicht zuviel Zeit aufopfern möchten. Grundsätzlich sollte jemandem schon sehr geholfen sein, wenn er die richtigen Stichwörter bekommt, der Rest erledigen die tausenden Artikel im Netz
2. Wie Firefighter grundsätzlich sagt, kann man erwarten, dass zumindest grundsätzliches über die Begriffe GAC, DLL-Hell und strongtyped man sich selber aneignen kann. Daher sollten die Fragen deutlich spezifischer werden. Das zeigt dann nämlich auch, dass du bei der Diskussion mitwirkst und nicht nur passiv konsumierst, was schliesslich etwas sehr wichtiges ist bei einer Diskussion.
3. Ich frage mich, ob es wirklich sinnvoll ist, die DLL zentral auszuteilen. Welche Vorteile siehst du darin? Speicher sparen? Bei heutigen Speichergrössen?
Ich sehe dagegen mindestens einen deutlichen Nachteil. Wenn du für neue Features bei Tool A auf eine neue Version einer Lib setzen willst, weil dadurch Vorteile entstehen, es aber leider darin einen Bug hat, welcher sich für Tool B negativ auswirkt, hast du ein Problem. Wenn Tool A und Tool B jeweils eigene DLLs verwenden, kannst du nur die DLL von Tool A updaten. Anders gesagt, du bist deutlich flexibler.
4. Eine weitere Möglichkeit, das ganze auf einfache Art und Weise trotzdem zusammenzuführen:
Wirf alle DLLs und EXEs aller Tools in den gleichen Ordner. Durch Verknüpfungen und geschickt gewählte zusätzliche Unterordner, lassen sich die Daten trotzdem trennen. Falls die Tools Konsolenanwendungen sind, hat es sogar den Vorteil, dass man nur einen Pfad in der PATH Umgebungsvariable eintragen muss, damit man die Tools auf der Windows-Konsole zur Verfügung hat.Grüssli
-
GAC = Global Assembly Cache = Globale Ablage für gemeinsam verwendete DLLs.
Ich frage mich, warum mir das keiner sagen konnte - statt den langen Rumredereien.Ich habe die DLL mit dem folgenden Befehl im GAC installiert:
gacutil.exe /if C:\EC-Apps\Feger\ICSharpCode.SharpZipLib.dll
(Das Tool gacutil wird mit Visual Studio installiert.)Danach wurde die folgende Meldung angezeigt:
Die Assembly wurde dem Cache erfolgreich hinzugefügt.Der Explorer zeigt mir jetzt unter C:\Windows\assembly die DLL an.
Offenbar scheint alles geklappt zu haben.
Ich habe auch gelesen was strongtyped ist. Kann im GAC überhaupt eine nicht-strongtyped DLL installiert werden? Oder würde dann eine Fehlermeldung vom Tool gacutil kommen?
Was ist, wenn nun im Programmordner die DLL ebenfalls liegt. Wird in diesem Fall die DLL im GAC oder die im Programmordner genommen?
-
csofti schrieb:
Kann im GAC überhaupt eine nicht-strongtyped DLL installiert werden?
Nein.
csofti schrieb:
Was ist, wenn nun im Programmordner die DLL ebenfalls liegt. Wird in diesem Fall die DLL im GAC oder die im Programmordner genommen?
Das ist von mehreren Dingen abhängig:
http://msdn.microsoft.com/en-us/library/aa720133(VS.71).aspx
-
csofti schrieb:
Ich frage mich, warum mir das keiner sagen konnte - statt den langen Rumredereien.
Weil du dies innerhalb von Sekunden selber rausfinden kannst. In Wikipedia in die Suche "GAC NET" eingeben und schon hast du es. Ich habe zum Beispiel die MSDN Suche direkt in die Browser-Adresszeile integriert, so dass ich nur folgendes schreiben kann "msdn GAC". Dabei ist das erste Suchergebnis das gesuchte Resultat.
Es geht also schneller, als hier nochmals einen Beitrag zu schreiben und nachzufragen. Wenn das jemand ganz offensichtlich nicht macht, dann stösst dies den Helfern meistens negativ auf. Man bekommt eben das Gefühl, dass der Hilfesuchende nicht aktiv mitarbeitet.
Eine Nachfrage, ob mit GAC denn der Global Assembly Cache gemeint war, wäre bereits deutlich besser angekommen. Hätte womöglich ausgelöst, dass dies jemand nicht nur mit "ja" beantwortet, sondern die Thematik noch ein wenig weiter erläutert. Schliesslich zeigt es, dass der Hilfesuchende mitgedacht hat und das Kürzel nachgeschlagen hat. Wer mitdenkt und mitarbeitet, wird auch belohnt. Das ist ganz natürliches und menschliches VerhaltenDeine restlichen Fragen sind von witte beantwortet, oder? Ansonsten weiterfragen
Grüssli
-
Meine Fragen sind fast alle beantwortet... Danke schon mal an alle...
Ich habe ein C# Projekt mit XMLspy zum Zugriff auf entsprechende XML Dateien erzeugt. Danach habe ich das Strong Name Tool (sn.exe) hergenommen um eine neue Schlüsseldatei zu erzeugen. Danach habe ich die Schlüsseldatei im C# Projekt unter Eigenschaften -> Signierung angegeben und die Parser DLL neu compiliert. Danach konnte ich die DLL mit gacutil.exe im GAC installieren. Funktioniert alles super!
Nun habe ich aber ein generelles Verständnisproblem. Was macht sn.exe genau? Erzeugt sn.exe ein RSA-Schlüsselpaar oder nur einen Schlüssel bzw. einen sich nie wiederholenden Hashcode? Offenbar wird der starke Assembly-Name durch das Schlüsselfile gebildet, oder? Was mache ich bei einer neuen Version? Erzeuge ich hier ein neues Schlüsselfile oder genügt hier einfach das hochzählen der Versionsnummer in den Projekteigenschaften?
-
Der Schlüssel wird benötigt um verschiedene Hersteller/Produkte auseinanderhalten zu können. Es könnte ja beispielsweise sein dass zwei Hersteller auf denselben glorreichen Gedanken kommen, ihren output als helper.dll zu bezeichnen.
Der GAC ist nicht nur ein einfacher Ordner, er kann durchaus verschiedene dlls mit gleichen namen versch. Hersteller und/oder versch. Versionen aufnehmen.
-
Kann man die mit sn.exe erzeugte Schlüsseldatei auch in andere Entwicklungsumgebungen als VS benutzen oder ist das eine geschlossene Microsoft-Veranstaltung?