hm....: exe datei bei c# funktioniert nur im debugg

hi leute,

ich habe ein in c# geschriebenes testprogramm (von sonem youtube video tutorial nachprogrammiert). die exe datei funktioniert im debugg ordner aber wenn ich sie auf den desktop kopiere funktioniert sie dort nicht.

beim compelieren mit f6 bekomm ich folgende warnung:

------ Erstellen gestartet: Projekt: Test1, Konfiguration: Release x86 ------
C:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets(316,9): warning CS1691: "2008" ist keine gültige Warnungsnummer.
  Test1 -> C:\Users\name\Documents\Visual Studio 2010\Projects\Test1\Test1\Test1\bin\x86\Release\Test1.exe
========== Build: 1 erfolgreich oder aktuell, Fehler bei 0, 0 übersprungen ==========

jetzt frage ich mich ob dieses nicht funktionieren auf dem desktop mit der warnung zutun haben könnte oder ob irgendetwas anderes schief gelaufen ist.

könnt ihr mir helfen? eigendlich legt c# ja beim compilieren in visual studios express c# eine entsprechende content datei an, sieht zumindest so aus und damit müssten alle verwendeten dateien (paar bilder) im exe vorhanden sein

  1. funktioniert sie dort nicht.

    Das heißt? Sie startet dann einfach gar nicht?

    CS1691

    Solche "seltenen" Meldungen haben eine hohe Wahrscheinlichkeit, in Google recht eindeutige Ergebnisse zu liefern.
    Irgendwo scheint 2008 vorzukommen das keine sinnvolle Zahl an dieser Stelle ist. Dass dein Programm deswegen zickt glaub ich eher nicht.

    sieht zumindest so aus und damit müssten alle verwendeten dateien (paar bilder) im exe vorhanden sein

    Davon würde ich nicht ausgehen. Was verstehst du unter der angesprochenen Content Datei?
    Da gibts also Bilder die dein Programm benötigt? Nächstes mal bitte genauer beschreiben was du tust ;-)
    Also ich schätze dein Programm braucht diese Bilder und findet sie nicht. Kommt da wirklich gar kein Hinweis auf sowas?

    Noch ein Tip, Leute die sowas in youtube veröffentlichen halten sich zwar für die allerbesten, aber sie sinds oft nicht. Einfach irgendwas abtippen oder nachmachen ohne nachzudenken und ohne zu verstehen was man macht, halte ich für riskant.

    1. danke für die antwort. :)

      funktioniert sie dort nicht.
      Das heißt? Sie startet dann einfach gar nicht?

      jep. allerdings funktioniert sie nur nicht wenn ich sie in ein anderes verzeichnis verschiebe

      CS1691
      Solche "seltenen" Meldungen haben eine hohe Wahrscheinlichkeit, in Google recht eindeutige Ergebnisse zu liefern.
      Irgendwo scheint 2008 vorzukommen das keine sinnvolle Zahl an dieser Stelle ist. Dass dein Programm deswegen zickt glaub ich eher nicht.

      mit den google ergebnissen kann ich leider nichts anfangen:

      http://msdn.microsoft.com/de-de/library/7z6tx3wa.aspx

      -> hier verstehe ich soziemlich kein einiges wort.  #pragma warning kommt mir merkwürdig vor, ich glaube da müsste ich mich tage oder wochenlang einlesen :(

      sieht zumindest so aus und damit müssten alle verwendeten dateien (paar bilder) im exe vorhanden sein
      Davon würde ich nicht ausgehen. Was verstehst du unter der angesprochenen Content Datei?
      Da gibts also Bilder die dein Programm benötigt? Nächstes mal bitte genauer beschreiben was du tust ;-)
      Also ich schätze dein Programm braucht diese Bilder und findet sie nicht. Kommt da wirklich gar kein Hinweis auf sowas?

      da kommt kein hinweis.

      in visual studios habe ich eine projekt mappe, in dieser liegen zwei projekte

      einmal mein programm, also der eigendliche code (projektname: test1). und dann noch ein projekt welches "content" heißt und von visual studios angelegt wurde. in dieses contenprojekt speichere ich alle bilder, die dann auch im entsprechenden conten verzeichnis liegen

      drücke ich auf f6, wird eine "ContentReferenz" im projekt test1 angelegt, eine mappe welche anscheind eine verlinkung zum content enthält (ist son schiefer pfeil dran).... eventuell enthält die projekt datei test1 tatsächlich nur einen pfad zum content ordner..... aber das scheint von visual studios so vorgesehen zu sein. jetzt weiß ich leider nicht, was ich machen kann bzw. nach was ich googlen könnte um dieses problem zu beheben

      Noch ein Tip, Leute die sowas in youtube veröffentlichen halten sich zwar für die allerbesten, aber sie sinds oft nicht. Einfach irgendwas abtippen oder nachmachen ohne nachzudenken und ohne zu verstehen was man macht, halte ich für riskant.

      joa, ich hab gerade angefangen mir die sprache c# genauer anzugucken, da komm ich mit den videos schnell zu einigen fetzen code (erstaunlich wie schnell man mit c# eine entsprechende gui bekommt)

      1. Machs mal anders. Lerne erstmal die Grundlagen der Sprache, zum Beispiel anhand eines einfachen Konsolenprogramms. Entwickle in einem einfachen Editor, Notepad++ zum Beispiel. Kompiliere das ganze das ohne Verwendung einer Entwicklungsumgebung, Stichwort CommandLineCompiler.  Wenn du das ansatzweise verstehst und du eine exe-nutze die Entwicklungsumgebung. Ansonsten fehlen dir die Grundlagen.

        1. Machs mal anders. Lerne erstmal die Grundlagen der Sprache, zum Beispiel anhand eines einfachen Konsolenprogramms. Entwickle in einem einfachen Editor, Notepad++ zum Beispiel. Kompiliere das ganze das ohne Verwendung einer Entwicklungsumgebung, Stichwort CommandLineCompiler.  Wenn du das ansatzweise verstehst und du eine exe-nutze die Entwicklungsumgebung. Ansonsten fehlen dir die Grundlagen.

          die syntax von c# müsste ich können, mein problem ist, dass ich nicht weiß warum meine exe die dell nicht enthält, sondern nur den pfad zur dell.

          die dinge die ich lernen müsste wären:
          1. was genau ist eine dell datei und warum ist sie wichtig, bzw warum wird sie von visualstudios angelegt
          2. warum liegt der kontent ordner nicht im eigendlichen prijekt, so wie ich es immer in java mache
          3. generell sollte ich in erfahrung bringen warum ich in meinem derzeitigen projekt mehrere files habe, deren endungen ich nicht kenne 8in java mit eclipse war das immer leicht, da hatte ich nur java classen und meine ressurcen, was csv oder png oder xml dateien waren)

          mit der syntax hab ich keine probleme, dafür aber mit dem drum herum .)

          1. vs wird bestimmt einen entsprechenden knopf parat gestellt haben, der das erstellen einer exe datei ermöglicht, welche bereits die entsprechende dell datei enthält und keine externen ressurcen benötigt. daher schrecke ich noch etwas davor zurück, dass ganze ding auseinander zu nehmen. aber ich verstehe generell nicht warum der cantent ordner nicht im projekt ordner liegt und leider bockt das ding, so dass ich den ordner nicht einfach darein verschieben kann

            1. vs wird bestimmt einen entsprechenden knopf parat gestellt haben, der das erstellen einer exe datei ermöglicht, welche bereits die entsprechende dell datei enthält und keine externen ressurcen benötigt. daher schrecke ich noch etwas davor zurück, dass ganze ding auseinander zu nehmen. aber ich verstehe generell nicht warum der cantent ordner nicht im projekt ordner liegt und leider bockt das ding, so dass ich den ordner nicht einfach darein verschieben kann

              Sorry, aber für einen Programmierer liest sich das gruselig... abgesehen von den ganzen Schreibfehlern meine ich jetzt. Fang bitte nochmal ganz von vorne an. Und zwar ohne IDE.

            2. am liebsten würde ich die png dateien wie bei java direkt ins projekt packen in einen ordner

              aber dann weiß ich nicht wie ich darauf zugreifen könnte, bisher nutze ich nämlich Content.Load ...

              was ich vielleicht noch erwähnen sollte, ich benutze im programm xna. ich weiß nicht, ob das etwas an der architektur ändert. auf jedenfall macht mir diese kloppi namens "content" zu schaffen ^^ leider finde ich nix anständiges dazu im netz

              1. am liebsten würde ich die png […]
                was ich vielleicht noch erwähnen sollte, ich benutze im programm xna. […]

                Ich kann dongo nur recht geben. FÜr mich klingt es momentan so, als ob du ein Spiel schreiben willst. (XNA scheint ja primär ein Game-Framework zu sein)

                Lerne zuerst die Grundlagen, das schließt unter anderem ein, dass wenn dein Programm externe Resourcen verwendet - sei es nun eine DLL oder eine PNG - und diese ist nicht vorhanden, sollte das Programm nicht einfach mitteilungslos bei der Initialisierung sterben, sondern wenigstens noch eine Fehlermeldung ausko...spucken.

                Als Medizinstudent im ersten Semester rennt man ja auch nicht in den nächstgelegenen Operationssaal und schneideten an (noch) lebenden Menschen rum. (Yay, ein Vergleich ohne Autos :D)

                MfG
                bubble

                --
                If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
          2. die syntax von c# müsste ich können, mein problem ist, dass ich nicht weiß warum meine exe die dell nicht enthält, sondern nur den pfad zur dell.

            Na ja, die Syntax ist ja auch nicht gerade schwer, oder? Du musst verstehen, was du überhaupt machst, das ist dein Problem. Einfach nur irgendwo draufklicken und irgendwas generieren bringt da nichts. Was willst du eigentlich erreichen?

            die dinge die ich lernen müsste wären:

            1. was genau ist eine dell datei und warum ist sie wichtig, bzw warum wird sie von visualstudios angelegt

            Eine dll ist eine Dynamic Link Library. Das kann man alles nachlesen.

            1. warum liegt der kontent ordner nicht im eigendlichen prijekt, so wie ich es immer in java mache

            Weil C# nicht Java ist.

            1. generell sollte ich in erfahrung bringen warum ich in meinem derzeitigen projekt mehrere files habe, deren endungen ich nicht kenne 8in java mit eclipse war das immer leicht, da hatte ich nur java classen und meine ressurcen, was csv oder png oder xml dateien waren)

            Warum arbeitest du dann nicht mit Java, wenn du das schon kannst? Oder hast du da auch nur in Eclipse auf Exportieren gedrückt und keinen Plan gehabt, was passiert? Das Problem ist nämlich, irgendwann kommst du an einen Punkt, wo du das wissen musst. Also besser vorher lernen.

            mit der syntax hab ich keine probleme, dafür aber mit dem drum herum .)

            das merke ich schon. Lass dir lieber mal bisschen Zeit, erarbeite die Grundlagen. Und dann, wenn du den Plan hast, nimm deine Entwicklungsumgebung.

  2. Zu der Warnung kann ich nichts sagen.

    … die exe datei funktioniert im debugg ordner aber wenn ich sie auf den desktop kopiere funktioniert sie dort nicht.

    Wenn ich mich noch recht erinnere, wird beim Debug-Target-Kompilieren (also mit Debug-Einstellungen) noch eine*.pbd-Datei (oder so ähnlich, auf jeden Fall fing die Dateierweiterung mit p an) erzeugt, diese beinhaltet für den Debugger nötige Informationen bereit hält.

    Kopier diese Datei mal mit und probier es dann noch mal, benutze eventuell die Konsole um das Programm zu starten um Fehlermeldungen die in stdout landen zu sehen.

    Ansonsten probier mal im Release-Target zu kompilieren und dann diese *.exe-Datei in einem anderen Verzeichnis zu starten.

    Eventuell kann es auch sein, dass du irgendwelche Bibliotheken (*.dll-Dateien) verwendest, die dann schlicht und ergreifend Fehlen, wenn sie nicht im System-Verzeichnis sind, oder im gleichen Verzeichnis wie die Anwendung.

    MfG
    bubble

    --
    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
    1. hm, ich glaube ich verwende eine dll datei.

      im contentprojekt sind die bilder, und dieses contentprojekt wird in eine dll umgewandelt und ein pfat zu dieser dll ist in meiner exe enthalten - glaube ich.

      was kann ich jetzt tun? die pfad angabe scheint schreibgeschützt zu sein

      1. Tach!

        hm, ich glaube ich verwende eine dll datei.
        im contentprojekt sind die bilder, und dieses contentprojekt wird in eine dll umgewandelt und ein pfat zu dieser dll ist in meiner exe enthalten - glaube ich.

        Glauben ist was für die Kirche. Programmieren ist eine exakte Angelegenheit.

        was kann ich jetzt tun? die pfad angabe scheint schreibgeschützt zu sein

        Wie werden DLLs gefunden? Ein Windows-Programm sucht zunächst im selben Verzeichnis danach, dann klappert es den PATH ab. Das macht Windows von selbst, ein Eingreifen ist da nur bedingt möglich.

        Wenn du dein Programm nun auf den Desktop kopiert hast, dann musst du auch dorthin die benötigten DLLs kopieren. Besser ist es, nur eine Verknüpfung auf dem Desktop anzulegen, und da wo die .exe eigentlich liegt auch die benötigten DLLs liegen zu haben.

        dedlfix.

        1. Hallo,

          Wie werden DLLs gefunden? Ein Windows-Programm sucht zunächst im selben Verzeichnis danach, dann klappert es den PATH ab. Das macht Windows von selbst, ein Eingreifen ist da nur bedingt möglich.

          zusätzlich zum Verzeichnis der EXE-Datei wird noch %windir% und %windir%/system32 abgesucht.
          Diese ganze Sucherei gilt aber nur, solange die Anwendung nicht explizit den Pfad zur DLL angibt. Übergebe ich der API-Funktion LoadLibrary() eine genaue Pfadangabe, sucht Windows auch nicht mehr woanders.

          Ich weiß nicht, wie C# bzw. der C#-Compiler in WuschelStudio das umsetzt, aber das ist mal die Grundlage auf API-Ebene.

          Ciao,
           Martin

          --
          The other line moves faster. (from Murphy's Law)
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Diese ganze Sucherei gilt aber nur, solange die Anwendung nicht explizit den Pfad zur DLL angibt. Übergebe ich der API-Funktion LoadLibrary() eine genaue Pfadangabe, sucht Windows auch nicht mehr woanders.

            dedlfix und ich haben von statisch eingebundenen Bibliotheken gesprochen, LoadLibrary() ist dagegen ist die dynamische Variante, da ist es dann klar, dass %PATH% und . nicht abgesucht werden.

            Ich bin auf die dynamische Variante nicht weiter eingegangen, da die Beschreibung von hm.... eher nach der statischen Variante klang und ich nicht zu viel drum herum schreiben wollte, was wahrscheinlich in der jetztigen Situation für ihn/sie nur noch mehr Verwirrung gestiftet hätte.

            MfG
            bubble

            --
            If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
          2. Tach!

            Wie werden DLLs gefunden? Ein Windows-Programm sucht zunächst im selben Verzeichnis danach, dann klappert es den PATH ab. Das macht Windows von selbst, ein Eingreifen ist da nur bedingt möglich.
            zusätzlich zum Verzeichnis der EXE-Datei wird noch %windir% und %windir%/system32 abgesucht.

            Oder noch genauer: http://msdn.microsoft.com/de-de/library/7d83bc18.aspx

            Diese ganze Sucherei gilt aber nur, solange die Anwendung nicht explizit den Pfad zur DLL angibt. Übergebe ich der API-Funktion LoadLibrary() eine genaue Pfadangabe, sucht Windows auch nicht mehr woanders.
            Ich weiß nicht, wie C# bzw. der C#-Compiler in WuschelStudio das umsetzt, aber das ist mal die Grundlage auf API-Ebene.

            Kann man machen, tut man aber ohne Not nicht. Ich gehe davon aus, dass das hier nicht der Fall ist, denn dann wüsste der OP ja, wie er den Pfad umstellen müsste.

            dedlfix.