C# Syntax und Compiler Probleme

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Eddy.

    C# Syntax und Compiler Probleme

    Hi,

    eine recht einfache Frage: ich würde gern in C# anzeigen, wenn der Debugger attached ist. Das hab ich (analog zu VB) wie folgt versucht:

    VB.NET-Quellcode

    1. if (Debugger.IsAttached)
    2. Text += " (DEBUG)";


    Debugger ist aber nicht definiert ... also muss das wohl irgendwie anders gelöst werden.

    LG
    Peter

    Peter329 schrieb:

    Debugger
    Arbeite mit dem Namespace System.Diagnostics.Debugger.IsAttached
    oder schreib oben in die Klasse Using System.Diagnostics.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Supi ... mit Using System.Diagnostics (was wohl dem Imports im VB entspricht) klappt das dann.

    Ein HInweis auf das fehlende "Using" kam übrigens nicht. Die Fehlermeldung lautete: Der Name "Debugger" ist im aktuellen Kontext nicht vorhanden. Aber wenn man die die Vorschläge zur Fehlerbehebung öffnet, dann erscheint die Sache mit dem "using". Na, jetzt weiß ich nächstens wo ich gucken muss.

    Noch ein ein Problemchen:

    VB.NET-Quellcode

    1. txtNumber.Text = My.Computer.Clipboard.GetText;


    Es wird der Name "My" moniert. (Der Name "My" ist im aktuellen Kontext nicht vorhanden). Die Hinweise zur möglichen Fehlerbehebung legen die Definition von einer Eigenschaft einem Feld oder einem Typ "My" nahe ... das scheint mir dann aber doch nicht so ganz in die richtige Richtung zu gehen.

    LG
    Peter
    mach doch einfach eine Suche im ObjectBrowser, zB nach ClipBoard - so findeste solchen Kram sehr zuverlässig


    Merke: Alle Klassen, und alle Klassen-Member findet man mit der Suche im ObjectBrowser.
    Bei Klassen-Member kanns - je nachdem - bisserl lästig sein, etwa einen Member .Count haben hunderte von Klassen.

    VisualStudio richtig nutzen (Google ist nicht deine Mami) beachte auch die Einstellungsmöglichkeiten der Präsentation des OBs, das kann viel Übersichtlichkeit bringen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Eddy schrieb:

    Aber wofuer gibt es denn ueberhaupt My.Computer.Clipboard? Das ist doch Schwachsinn.
    Du hast es erfasst. ;) Und exakt das trifft auch auf den Rest des My-Namespaces zu. Davon abgesehen, dass man hier auch die normalen Framework-Sachen benutzen könnte, weil das allein schon kürzer wäre, ist's auch sauberer. Der My-Namespace nutzt das intern ja auch, muss allerdings erstmal schlampig wrappen und am Ende hat man keinen Mehrwert.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    okie dokie ... als den My Namespace gibt es in C# also nicht ... gut ... mit "Clipboard.GetText()" geht es in diesem Fall ja auch ohne ...

    Herzlichen Dank für eure Ratschläge. Damit hab ich mein erstes C# Programm fertigstellen können - Prüfen, ob eine Zahl eine Primzahl ist. :) Na, für einen ersten Test ganz nett ...

    Eine Frage hab ich aber noch:

    Unter VB gibt es das Problem, dass die .exe Datei zum Ausführen das .NET Framework benötigt.

    Ist das bei C# Programmen ganz genauso ? (Ich fürchte, dass das so sein wird ... )

    Gibt es denn unter VS 2015 jetzt einfachere Möglichkeiten .exe Dateien zu generieren, die "autark" sind, d.h. die die benötigten Routinen fest linken und damit auch ohne ein installieres .NET Framework auskommen ?

    LG
    Peter
    Oder mit #If DEBUG
    oder einer anderen Debug Konstante
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    Oder mit #If DEBUG

    Was ist damit? Falls du glaubst, dass das auf das gleiche wie Debugger.IsAttached raus kommt liegst du zu 100% daneben. Das sind komplett unterschiedliche Dinge.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Unter VB gibt es das Problem, dass die .exe Datei zum Ausführen das .NET Framework benötigt.


    Microsoft ist dabei einen Compiler für c# zu entwickeln der das ermöglicht. Das Teil heißt .NET Native ist allerdings meines wissens noch nicht für Desktop Anwendungen erhältlich.

    Fakiz schrieb:


    Microsoft ist dabei einen Compiler für c# zu entwickeln der das ermöglicht. Das Teil heißt .NET Native ist allerdings meines wissens noch nicht für Desktop Anwendungen erhältlich.


    Das wäre genau das, was ich mir vorstellen würde!

    Die Sache mit dem "Intermediate Code" erlaubt es natürlich den ausgeführten Code zu optimieren, je nachdem auf welcher Plattform man gerade rennt ... aber das ist doch vollkommen Pillepalle, wenn ich etwa nur EINE Datei verschlüssele ... also jedenfalls keine Massendaten verarbeite! Ob so ein Befehl ein oder zwei Sekunden läuft ist doch Wurscht!

    Schade, dass es so einen wundersamen Compiler noch nicht gibt !
    Einfach mal danach googlen, es gibt da schon Ansätze, allerdings sind die nicht von Microsoft. Mir würde da auch noch C# Native einfallen hab ich aber noch nicht getestet.
    Wenn ich nativen Code brauche lagere ich diesen soweit es mir möglich ist nach c++ aus und schreibe die GUI dann mit c#.

    Fakiz schrieb:

    Einfach mal danach googlen, es gibt da schon Ansätze, allerdings sind die nicht von Microsoft. Mir würde da auch noch C# Native einfallen hab ich aber noch nicht getestet.


    Na, auf nicht Microsoft Ansätze würde ich mich in so einer komplexen Gemengelage nicht einlassen wollen. Zu .NET Native hab ich ein sehr informatives Video (Tiefe Einblicke in .NET Native) gefunden:

    msdn.microsoft.com/de-de/vstudio/dotnetnative.aspx

    So wie ich das verstehe gibt es von .NET Native nur einen "Preview" ... und der ist nicht fehlerfrei und hat ziemlich willkürliche Beschränkungen (z.B. max 4 Dimensions für Arrays)

    Aber jetzt verstehe ich die Problematik: MSIL Code in eine native .exe umzuwandeln ist viel mehr als nur das Auflösen von irgendwelchen externen Referenzen ... Es gibt keinen Compiler der eine .cs direkt in eine native .exe umwandelt. Sondern es wird nach wie vor der MSIL Code generiert. Und statt des JIT Interpreters wird die MSIL dann über mehrere Schritte dem C++ Compiler zugeführt und auf diese Weise eine native .exe generiert. Ein ganz schöner Verhau ... Was vor allem interessant ist, viele dieser Funktionen werden wohl für bestimmte Plattformen in die Cloud verlegt. D.h. die Cloud ist nicht nur Datenspeicher, sondern übernimmt auch Funktionalitäten. Na, schöne Welt der unbegrenzten Kommunikation. Einfacher wird die Sache dadurch nicht ...

    Fazit, ein Compiler für eine "native" .exe aus C# Source Code ist wohl noch Zukunftsmusik. Von dem Traum muss ich mich offensichtlich vorerst noch verabschieden. Wenn man von einigen exotischen Lösungen absieht ist tatsächlich die einzige Alternative derzeit, die Anwendung in C++ zu schreiben ... und da ist die Konvertierung natürlich ein ganz anderes Kaliber.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    ah - aber schreibt Peter329 denn an so performance-kritischen Anwendungen?

    Und meist ist schlechte Performance eher in schlechter Architektur begründet als darin, dass iwas zwischenkompiliert wern muss.

    Bzw. oft genug ist der spezielle Algorithmus, der die Performance benötigt, dann doch kompiliert, und weist dann überhaupt keinen Performance-Nachteil mehr auf.

    Und dann muss man auch mal auf die Nachteile Framework-unabhängiger Exen gucken - ist deren Verteilung ebenso problemlos?

    ErfinderDesRades schrieb:

    ist deren Verteilung ebenso problemlos?


    Ja. Je nach dem welchen Compiler man verwendet muss man Laufzeitumgebungen(hoffe das richtige Wort) installieren. Beim Visual C++ Kompiler, braucht man das entsprechende Runtime. Nimmt man wie ich einen alten GCC, braucht man keine Laufzeit Sachen installieren.
    And i think to myself... what a wonderfuL World!

    ErfinderDesRades schrieb:

    und ich frag mich, was eiglich nu konkret so dolle daran sein soll, eine Exe ohne Framework zu haben?


    Ganz einfach, ich hätte ganz gern, dass meine Programme auf allen Windows Rechnern laufen können !

    Ich hab über den Hintergrund schon mal geschrieben: ich reise sehr gern nach Asien, Latein America ... in sehr entlegene Gebiete ... Ich hab zwar einen Laptop mit USB Dongle dabei ... aber da wo ich hinreise, gibt es oft nicht mal ein G3 Netz. Die einzige Anbindung ist vielleicht nur ein "Internet Cafe", das ist eine Bretterbude mit ein paar betagten PCs und einem wackligen DSL Anschluss, über Kabel die an Palmen genagelt sind. Und auf diesen PCs läuft dann ein Windows unbekannter Herkunft ... Ein Net Framework ist da nicht zu erwarten.

    Ich hab meine Daten verschlüsselt auf einem USB Stick ... mit meinem dazu passenden EncryptingBrowser VB Programm ... tja ... und dieses Programm läuft jetzt nicht ... Jetzt klar, warum ich gern ein Programm hätte, das ohne .NET auskommt ? :)

    LG
    Peter