none
DLL erzeugen und in anderen Projekten verwenden RRS feed

  • Frage

  • Hallo, ich wollte einige Funktionen schreiben, welche ich gerne immer wieder verwenden will. Dachte mir nun, dass dies ganz gut über DLL´s geht. Ich habe jetzt gelesen, dass man diese erzeugt, indem man einen Klassenbibliothek erstellt und diese erzeugen lässt. nun kann ich in anderen Projekten über "Verweis hinzufügen" diese einfügen, aber jetzt muss ich doch noch eine using einfügen, oder? Diese markiert er mir nun rot und sagt, dass er sie nicht finden kann. kann mir jemand helfen?

    Montag, 20. Dezember 2010 21:31

Antworten

Alle Antworten

  • ...indem man einen Klassenbibliothek erstellt und diese erzeugen lässt. nun kann ich in anderen Projekten über "Verweis hinzufügen" diese einfügen, aber jetzt muss ich doch noch eine using einfügen, oder?
    Hallo B,
    ja, beachte etwa - das 'using' bezieht den/die Namespace(s) der Assembly (DLL), nicht etwa den Dll-Namen.
    Alles weitere ist in MSDN und meisten Büchern eigentlich vollumfänglich beschrieben.

    Verwenden von Namespaces (C#-Programmierhandbuch)
    http://msdn.microsoft.com/de-de/library/dfb3cx8s.aspx

    Beachte weiter auch, die Klassen in den entsprechenden Namespaces deiner DLL-Assembly müssen sinnvollerweise etwa typisch 'public' erreichbar sein.
    Montag, 20. Dezember 2010 21:36
  • ja das ist ja das Problem, ich habe ja den Namen des Namespaces eingegeben, jedoch kennt er ihn nicht, ich wei nicht, was ich da anderst machen soll, steht überall genauso wie ich es gemacht habe :-(
    Montag, 20. Dezember 2010 21:51
  • Hallo Bensen,

    wenn es mit using nicht geht check bitte folgendes

    a) Ist die Klasse in deiner DLL als public definiert?
    b) Hast du deinem Projekt unter "Referenzen" eine Referenz auf deine erstellte DLL hinzugefügt?
    c) Stimmt der im using angegebene Namespacename mit dem Namespace deiner Klasse (siehe a) überein?

    Dann sollte es eigentlich funktionieren.

    Martin

    Dienstag, 21. Dezember 2010 07:28
  • Hallo B.,

    • > indem man einen Klassenbibliothek erstellt und diese erzeugen lässt. nun kann ich in anderen Projekten über "Verweis hinzufügen" diese einfügen, aber jetzt muss ich doch noch eine using einfügen, oder?

    ja, genau so. Jetzt muss sie nur noch public in der Klassenbibliothek definiert sein - und ggf. Groß-Kleinschreibung beachtet sein. Um das using automatisch zu erreichen, kannst Du folgendes machen:
    Wenn Du die Klassenbibliothek über (möglichst Projekt-) Verweise eingebunden hast (gleiches .NET Framework), kannst Du normal den Klassennamen einfach eintippen, dann, wenn er dann "unterkringelt" ist, [Strg - . ] (Control-Punkt/Edit.Generate und dann [Enter]) drücken, dann ersetzt Visual Studio ggf. selbstständig das using. Das ist in der Praxis immer eine ziemliche Zeitersparnis.

    Nachtrag: und das geht auch ohne Reflector wie oben beschrieben, auch bei unbekannten DLLs. Und 'by the way' normal kann man sich die Klassen auch durch Doppelklick auf die DLL unter Projektmappenexplorer/Verweise anschauen. Und dort kann man auch auf "Suchen" klicken und dann nur seine Klassennamen in der DLL finden. Aber das ganze ist eben nicht nötig, da das über [STRG .] schon von der IDE gut unterstützt wird.


    ciao Frank
    Dienstag, 21. Dezember 2010 07:51
  • B,

    neben dem von mir bereits gestern genannten 'public' für Klassen, achte auch auf die Vorgehensweise beim referenzieren der 'Klassenbibliothek':
    da sollte man  (mind im frühen Entwicklungsstadium empfohlen)  nicht etwa direkt einen Verweis zB auf die 'nackte' DLL-Datei machen, sondern besser:
    1.) zuerst das Bibliotheks-Projekt  (csproj) in dieselbe Projektmappe der Ziel-App aufnehmen,
    2.) im App-Projekt einen Verweis auf das Bibliotheks-Projekt aufnehmen [eben nicht DLL].

      (bzw du erstellst von Anfang an beide Projekte in derselben Projektmappe)

    PS: und bei beiden Projekten sollte die Zielframework-Version (2.0/3.x/4.) vorerst möglichst 'gleich' sein.
    Dienstag, 21. Dezember 2010 08:56
  • danke. es ging eigentlich darum, dass ich von jemandem eine dll geschickt bekommen habe. wenn das jetzt der fall ist, kann ich ja nur die nackte dll einbinden und wie weis  ich dann die using?
    Sonntag, 26. Dezember 2010 09:29
  • Hallo Bensen,

    wenn es eine .Net DLL ist, kannst Du Dir diese anschauen. Ein mögliches Tool ist hier z.B. .Net reflector von Red Gate (http://www.red-gate.com/products/dotnet-development/reflector/).

    Der MSIL Disassembler (ildasm.exe) kann sowas natürlich auch, aber die GUI von Reflector ist ganz nett und für slche kleinen Aufgaben ideal. (http://msdn.microsoft.com/en-us/library/f7dy01k1(VS.80).aspx)

    Mit den besten Grüßen,

    Konrad

    Sonntag, 26. Dezember 2010 09:47
  • Hallo Bensen,

    denn Namespace weisst Du zwar in der Regel nicht, vielleich hilft Dir aber folgendes:

    Wenn ich eine Klassenbibliothek als Projekt im Visual Studio anlege, verwendet das Visual Studio den Projektnamen als Namespace. Sollte der Orginalautor der DLL dies nicht geändert haben, wäre das ein guter Startpunkt.

    Sollte dies nichts nutzen, würde ich die DLL in den .NET Reflector (http://www.red-gate.com/products/dotnet-development/reflector/ ) laden. Spätestens da bekommst Du alle Einzelheiten.

    Schöne Grüße

    Oliver

    Sonntag, 26. Dezember 2010 10:03
  • B,

    eine blosse Assembly (DLL-Lib) sollte auch im Studio ganz 'normal' per:
    Object Browser - Objektkatalog
    http://msdn.microsoft.com/de-de/library/exy1facf.aspx

    sichtbar sein, inkl Namespaces.
    Einfach im Projekt-Explorer/Baum unter den Verweisen die fragliche DLL doppelklicken
     [Da muss man weder raten noch 'reflektieren']

    • Als Antwort markiert Bensen83 Mittwoch, 29. Dezember 2010 22:29
    Sonntag, 26. Dezember 2010 11:13