Announcement

Collapse
No announcement yet.

Icon aus Ressource laden bei einer Konsolen-Anwendung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Icon aus Ressource laden bei einer Konsolen-Anwendung

    Hi an alle,

    ich habe mal wieder eine Frage, dazu habe ich schon ein wenig bei Google gesucht. Ich möchte bei einer Konsolenanwendung ein Icon (welches Visual Studio bereits als Projekticon gesetzt hat) aus den Ressourcen laden.

    Mein erster Versuch war folgender :
    Code:
    System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Program));
    Functions.SetConsoleIcon(((System.Drawing.Icon)(resources.GetObject("mcserve.ico"))));
    Die Datei 'mcserve.ico' liegt im Hauptverzeichnis des Projektes als Eingebettete Ressource.
    Das Projekt lässt sich zwar kompilieren, allerdings tritt ein Fehler (MissingManifestResourceException wurde nicht behandelt) auf. Ich schätze mal dass der Pfad nicht ganz korrekt ist.

    Ach die Funktion SetConsoleIcon ändert das Icon einer Konsolenanwendung und funktioniert einwandfrei, die Funktion erwartet System.Drawing.Icon.

    Ich hoffe es kann mir jemand ein Tipp dazu geben.
    MfG Xe77a

  • #2
    Hallo,

    schau dir mit dem Reflector bzw. ILSpy den korrekten Pfad an.

    Einfacher gehts aber, wenn du in VS eine Resourcendatei hinzufügst. Dann wird eine Klasse generiert, mit der sich der Zugriff viel leichter gestalten lässt.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Vielen Dank für deine Antwort.
      Das Tool ist richtig gut, werde ich mir merken.

      Ich habe die *.exe mal untersucht und das Icon gefunden aber wie genau setzt sich jetzt der Pfad zusammen?

      MfG Xe77a

      Comment


      • #4
        Hallo,

        wenn ich mich jetzt nicht irre, so gehört der Namespace noch in den Pfad. Im Tool siehst du ja wie der Pfad ist.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hi,
          ich sehe im Tool nicht direkt den Pfad, sondern nur die Baumstruktur auf der linken Seite.
          Ich denke es wäre kein Problem den Pfad zusammen zu basteln, wenn man die Struktur kennt. Der Pfad laut der Baumstruktur wäre "MCServe\Resources\MCServe.MCserve.ico". Ist das so richtig oder muss da sowas wie "application:,,," vor?

          MfG Xe77a

          Comment


          • #6
            Hallo,

            MCServe.MCserve.ico sollte reichen. Das mit "application:,,," ist von WPF und wird Pack-Uri bezeichnet.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Hi,

              Ich habe jetzt folgenden Code:
              [highlight=c#]System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Program));
              Functions.SetConsoleIcon(((System.Drawing.Icon)(re sources.GetObject("MCServe.MCserve.ico"))));
              [/highlight]

              Da fällt der Fehler auf "System.Resources.MissingManifestResourceExcep tion wurde nicht behandelt.".

              Mir fällt jetzt gerade auf, kann es sein, dass typeof(Program), falsch ist, bzw. da typeof(MCServe) oder so stehen sollte?

              MfG Xe77a

              Comment


              • #8
                Warum machst du es so schwer und benutzt nicht einfach die Klasse die dir automatisch als Umbau um eine resx Datei geliefert wird? Und wenn du die aus irgendeinem Grund tatsächlich nicht nutzen willst erzeug sie dir doch einfach mal und sieh dir den erzeugten Code an. Dann wird vermutlich klar wo dein Problem liegt. Wir können von hier sonst nur rumraten, in welcher Assembly liegt das, wie ist die Datei benammst, wie ist die Resource benammst etc.

                Da fällt der Fehler auf "System.Resources.MissingManifestResourceExcep tion wurde nicht behandelt.".
                Eine Exception hat nicht nur einen Typ sondern auch eine Meldung. Da steht eigentlich ziemlich genau drin was das Problem ist.

                Mir fällt jetzt gerade auf, kann es sein, dass typeof(Program), falsch ist, bzw. da typeof(MCServe) oder so stehen sollte?
                Wenn du denn Konstruktor nur mit Type aufrufst muss die Resource auch so wie der Typ heißen.

                Comment


                • #9
                  Hi,

                  Warum machst du es so schwer und benutzt nicht einfach die Klasse die dir automatisch als Umbau um eine resx Datei geliefert wird?
                  Ich wollte eigentlich nicht ein und die selbe Datei mehrmals im Projekt haben.
                  Ich habe jetzt aber mal eine Ressourcen-Datei angelegt und dort das Icon integriert. Ein paar Minuten später lief das Projekt einwandfrei, so wie es sein sollte. Vielen Dank für eure Hilfe !

                  Eine letzte Frage noch : Wird diese Ressourcen-Datei nach dem kompillieren in die *.exe integriert oder ist sie seperat zu finden?

                  MfG Xe77a

                  Comment


                  • #10
                    Hallo,

                    Wird diese Ressourcen-Datei nach dem kompillieren in die *.exe integriert oder ist sie seperat zu finden?
                    Die wird in die Assembly kompiliet, dort bei den Ressourcen. Du findest siehe also auch mit dem ILSpy.

                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Hi,

                      ok danke, dann weiß ich jetzt bescheid.

                      MfG Xe77a

                      PS: Ich denke das Thema kann geschlossen werden.

                      Comment

                      Working...
                      X