Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Abt
Thema: Meldung verweist auf einen Pfad von einem anderen Rechner
Am Heute, im Forum: Rund um die Programmierung

Siehe Symbol / PDB files in the Visual Studio debugger
Eine ganz arg wichtige Komponente im .NET Ökosystem. Sollte jede Person, die .NET entwickelt, kennen.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am Heute, im Forum: Wünsche und Kritik

Das Problem hier ist bisschen der Datenschutz ( mal wieder ) - in der Vergangenheit haben wir mehrfach die Dateinamen editieren müssen, weil da Sachen drin standen, die auf private Daten schlossen. Ganz ohne Dateinamen / Random Name war es dann aber doof, weshalb wir den originalen Dateinamen doch wieder in die UI genommen haben, aber nicht in den Download.

Für zusammenhängende Dateien kann man ja ohnehin ZIP-Dateien anhängen; der Inhalt bleibt ja dann unberührt.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am Heute, im Forum: Wünsche und Kritik

Zitat von Th69
Sollte der Forenbereich "FAQ" (und evtl. auch "Artikel") für normale Benutzer nicht besser schreibgeschützt sein (da gerade dort ein Thema fälschlicherweise eröffnet wurde)?
Korrekt. Das ist tatsächlich schon implementiert, aber leider noch nicht gemerged.
Zitat von Th69
Außerdem ist mir noch eine andere Sache aufgefallen:
Beim Herunterladen von Anhängen wird nicht der angezeigte Dateiname genommen, sondern "attachment-...", so daß man selber den Dateinamen beim Abspeichern wieder ändern muß.
Das ist tatsächlich Absicht. Was ist denn die Situation, dass das unpraktisch ist?

Thema: DDE ist obsolet. Welche Alternative
Am Heute, im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ähm.. was hat C# als Programmiersprache damit zutun? Die liefert hier natürlich gar nichts.
Ist auch nicht der Sinn einer Programmiersprache.

DDE ist eine Art Protokoll; Du musst also nach Protokoll-Alternativen schauen, nicht nach C#.
Und DDE ist schon seit fast 15 Jahren überholt - da gibts mehr als eine Alternative; eher schon zwei, drei Generationen weiter.

Gehts Dir um "Real Time Communication" wirds wohl Richtung Web Sockets / gRPC gehen.
Hast Du DDE im Maschinenbau-Bereich verwendet, dann vermutlich eher Richtung OPC-UA.

So einfach wie "Was liefert C#?" wirds hier nicht. Da wirst ne ordentliche Evaluierung machen müssen.

PS: bitte in Zukunft keine Threads mehrfach erstellen, auch nicht wenns im falschen Forum war.
[Hinweis] Wie poste ich richtig?

Thema: Mithilfe von .NET+Android auf Synology MariaDB zugreifen
Am im Forum: Netzwerktechnologien

Synology unterstützt auch Docker, daher kann man auch Apps in Docker Images (mit .NET, oder Java oder...) verlagern und die Container auf Synology laufen lassen.

Thema: Mithilfe von .NET+Android auf Synology MariaDB zugreifen
Am im Forum: Netzwerktechnologien

NodeJS und Apache sind hier (vereinfacht gesagt) nur eine Runtime.
Den Dienst und die Modelle, die zwischen Server-App und Client App (bei Dir Mobile) ausgetauscht werden, musst Du selbst entwickeln.

Thema: Zugriff auf Variable anderer Klasse
Am im Forum: Grundlagen von C#

Serilog ist "nur" ein Provider für Logging - .NET (und dessen Interfaces).
Für Serilog muss man aber zwingend ILogger verstehen; daher der Reihe nach lieber anfangen, wenn es schon an OOP hapert :-)

Thema: Zugriff auf Variable anderer Klasse
Am im Forum: Grundlagen von C#

Nein macht man nicht so, denn das ist nicht die Grundidee von Objektorientierte Programmierung - auch sowas wie "globale Variablen" sollte es nicht geben. Sehr klares Zeichen für Spaghetti-Code.
Der Code von Dir offenbart ein bisschen, dass Du die Grundlagen von OOP nich nicht so im Griff hast. Da würde die Investition in ein Tutorial und Lektüre sehr gut tun ;-)

Eine Situation, wie Du sie hast, sind simple Abhängigkeiten, und in OOP arbeitet man mit Instanzen.
Der Trick ist also, dass beim Erstellen des Loggers Optionen mitgegeben, wobei die Optionen selbst eine eigene Klasse sind.


public class LoggerOptions
{
    public string LogPath { get; set; }
}

public class LoggerProvider
{
    private readonly LoggerOptions _options;

    public LoggerProvider(LoggerOptions options)
    {
        _options = options;
    }

    public async Task WriteLog()
    {
        // _options.LogPath ist hier nun verfügbar.
    }
}

Dann kannst Du den Logger sehr simpel erstellen - und brauchst nirgends irgendwelche Workarounds wie Global oder static.


LoggerOptions options = new LoggerOptions() { LogPath = @"D:\Entwicklung\temp\logfile.txt" };
LoggerProvider logger = new(options);

Und den Logger kannst Du nun überall übergeben, wo er benötigt wird - ohne dass zB Deine CommandLineCheck die Implementierung von LoggerProvider kennen muss.
Aber das sind wirklich absolute OOP Basics - das lernt man auf den ersten 10 Seiten eines Einsteigertutorials :-)

PS: einen Logger musst Du nicht selbst schreiben, vor allem da seine Stream Lösung wie diese sehr Ineffizient ist.
Logging - .NET
Der funktioniert sogar so ähnlich wie der hier gezeigte Aufbau.

Thema: "FolderBrowserDialog" funktioniert nicht bei Ondrive-Backup??
Am im Forum: Grundlagen von C#

Zitat von cybermatze
Ich sehe aber den Zusammenhang nicht, warum es nicht mehr funktioniert, wenn das Backup von OneDrive für den Desktop eingeschaltet wird. Das hat doch erst einmal mit Forms und .Net nichts zu tun, oder? Da müsste OneDrive im Hintergrund so einiges mehr verbiegen, außer nur Dateien zu synchronisieren?
Korrekt. Es ist eine Windows Funktionalität. Windows hat eben zwei verschiedene Dialoge; vereinfacht gesagt "alt" und "neu.
Technisch gesehen ist der "Desktop" kein einfacher "Desktop" mehr, wenn er auf OneDrive liegt. Es ist eine Art von Symbolische Verknüpfung
Und der "alte" Dialog, der unter FBD verwendet wird, unterstützt das einfach nicht.

Kannst nichts dran ändern.
Zitat
Hat für mich noch jemand einen tipp, wie ich den OpenFileDialog so verbiegen kann, dass er nur eine Ordnerauswahl zulässt?
Gar nicht. Es ist einfach das falsche Werkzeug.
Das ist wie als wenn Du versuchst mit ner Banane nen Nagel in die Wand zu hauen.

Warum beachtest Du nicht den Hinweis von Th69 und machst das?
Ist doch die Lösung.

Thema: Inhalt der Combobox wird trotz Data-Binding nicht aktualisiert
Am im Forum: GUI: WPF und XAML

Top!

Aber... ;-)

Zitat
Ich habe also im CodeBehind (in der xaml.cs-Datei) dafür gesorgt, dass auch während der Laufzeit, die beiden Klassen-Objekt ihre Daten abgleichen und ggf. austauschen.
Das ist nicht die Idee von WPF.
Bei WPF sollte man mit [Artikel] MVVM und DataBinding arbeiten.
Der Code Behind ist für sowas eher nicht gedacht; führt meist zu Problemen (weil eben WPF mit MVVM konzipiert ist).

Thema: Json Meldung mit Array aus Elementen verschiedener Typen parsen
Am im Forum: Datentechnologien

Zitat von Papst
Die von Abt geschilderte hätte eine Änderung der Datenstruktur zur Folge.
Mh.. ich dachte nicht. Dann verstehe ich
Zitat
Jede dieser Klassen ist von einer Basisklasse abgeleitet. Die Basisklasse enthält nur ein einziges Property, das den Klassentyp der abgeleiteten Klasse als enum beinhaltet.
falsch.
Für mich liest sich das so, dass die Info im Json existiert, welche Klasse benötigt wird.
Man muss das also nur auslesen (ohne Serialisierung) und mit der Info, dann kann die entsprechende Klasse serialisiert werden.

Thema: "FolderBrowserDialog" funktioniert nicht bei Ondrive-Backup??
Am im Forum: Grundlagen von C#

Wenn ich das richtig aufgeschnappt habe, dann gab es dazu mehrere Fehler in Windows 11 und wurde mit KB5022303 teilweise behoben.
January 10, 2023—KB5022303 (OS Build 22621.1105) - Microsoft Support
Leider hast aber weder gesagt welche UI Technologie (vermutlich Forms?), noch Version, noch Betriebssystem (vermutlich Windows 11?) Du hast.

PS: .NET hat keinen eigenen Folder Browser Dialog. Was Du siehst kommt von Windows, nicht von .NET. .NET ruft einfach nur die API von Windows auf. Und ja: der alte SHBrowseForFolder, der unter dem FolderBrowserDialog sitzt, unterstützt das nicht.
Es kann also sein, dass Dein Vorhaben so generell mit dem FolderBrowserDialog nicht funktioniert, unabhängig vom KB.

Windows hat aber einen zweiten Dialog, der sich OpenFileDialog nennt und IFileDialog als API verwendet. Der unterstützt das auch.
Leider weiß ich aber auch nicht auswendig, wie man aus Windows Forms den neueren OpenFileDialog aufrufen kann.
Aber zumindest kennst den Grund.

Thema: Zugriffe nur von bestimmter Domain zulassen
Am im Forum: Web-Technologien

Auch Google Analytics kann das nicht.
Basics:
https://security.stackexchange.com/questions/106892/how-does-google-analytics-prevent-fake-data-attacks-against-an-entitys-traffic
how-does-google-analytics-prevent-traffic-spoofing#2419115

Es ist unmöglich das auf HTTP Ebene zu filtern.
Google hat eher eine Logik, um invalide Requests herauszufiltern - aber halt nicht auf "Controller"-Ebene. So funktioniert halt HTTP leider nicht.

Thema: Zugriffe nur von bestimmter Domain zulassen
Am im Forum: Web-Technologien

Logischerweise geht sowas nicht; das kannst Du auf Server-Seite nicht verhindern, weil Du den Ursprung eines Requests nicht kennen kannst. Der Request erfolgt logischerweise nicht von der Domain, sondern von einem Client.
Ich kann mir nen Script bauen, das Google Analytics direkt anspricht und Google kann das nicht verhindern. Daher funktioniert Google Analytics auch nicht so. Bei GA ist das eine Mischung aus Origin und Google Analytics Id.

Browser wiederum können das; das nennt sich CORS und ist ein Sicherheitsfeature, das per default aktiv ist.
Cross-Origin Resource Sharing (CORS) - HTTP | MDN

Enable Cross-Origin Requests (CORS) in ASP.NET Core

Thema: Wie kann man den asynchronen Task eines SignalR Hubs parametriesieren?
Am im Forum: Web-Technologien

Vorweg: weiß nicht genau wie Du auf Hallo Benjamin kommst, aber belass es bitte einfach bei "Abt". Danke.
Nebeneffekt: dann wissen auch andere potentielle Leser:innen, wen Du ansprichst. Nicknames gibts ja nicht umsonst.

Zitat
Könnte nun funktionieren!?
Ja, sieht besser aus.

Thema: Wie kann man den asynchronen Task eines SignalR Hubs parametriesieren?
Am im Forum: Web-Technologien

Auch das wird nicht funktionieren, bitte les Dir die Basics von SignalR durch.

Bei ASP.NET Core SignalR existiert vom Hub nur eine einzige Instanz - es ist als Singleton registriert, sonst würde es nicht funktionieren.
Das heisst, dass alle Verbindungen sich diese Hub Instanz teilen.

Jede Verbindung bei Dir überschreibt damit Deine Felder, und es kommt zu Race Conditions.
Daher die Basics beachten: verwende niemals Felder zum Datenaustausch in SignalR Hubs.

Den Code kannst so nochmal umbauen ;-)

Thema: Json Meldung mit Array aus Elementen verschiedener Typen parsen
Am im Forum: Datentechnologien

Zitat von Pippen
Verstehe ich Dich also richtig: Ich soll meine Json Meldung auf diese Dir vorgeschlagene Struktur umbauen?
Nein, hab ich nirgends gesagt. Das war lediglich ein Beispiel, wie man sowas umsetzen kann.
Natürlich musst Du das noch auf Deinen Fall adaptieren.

Thema: Wie kann man den asynchronen Task eines SignalR Hubs parametriesieren?
Am im Forum: Web-Technologien

Das is keine gute Idee. Damit hast Du Dir Race Conditions geschaffen, sofern Du mehrere Rennen und/oder Durchgänge parallel hast.
Das wird also in solchen Fällen hart nach hinten los gehen. So funktioniert im Endeffekt weder OOP noch SignalR (und dessen Hubs).

Zitat
wie kann man den asynchronen Task eines SignalR Hubs parametriesieren?
Ist ehrlicherweise auch keine gute Fragestellung. Es ist schlauer zu beschreiben, was Du vor hast, sodass man eine Lösung zum Use Case anbieten kann.
Du bist aber schon mit der Parametriesierung der Methoden ins Rennen gegangen, und willst genau das umsetzen - völlig egal ob das der richtige Weg ist (was er hier wohl eher nicht ist).

Da Du leider nichts zum Use Case geschrieben hast, muss man raten: Du willst im Endeffekt, dass der User eine Connection hat, aber über SignalR alle Rennen parallel verarbeitet werden können.
Das geht aus den besagten Problemen mit Deiner Implementierung nicht.

Im SignalR ist es vorgesehen, dass Du Dir merkst, welche Connection welche Informationen haben will.
Früher musste man das selbst implementieren ( Mapping SignalR Users to Connections ) - mittlerweile macht man das mit SignalR Groups.
Manage users and groups in SignalR

Der Client gibt also bekannt, welches Rennen er abonniert, und Du fügst die Connection der Gruppe hinzu.
Willst Du also alle Clients eines Rennens zeitgleich informieren, dann informierst Du alle Connections der Gruppe des Rennens.


await Clients.Group("MyRennenId").SendAsync("RennenUpdate" ...

Ich hoffe, dass das ist, was Du suchst. Ansonsten musst bitte die Tipps beachten und erzählen, was der Use Case ist...
Und der Hinweis, dass SignalR prinzipiell ein komplexes Konstrukt ist, das aber im Endeffekt sehr einfach an programmieren kann - aber man sollte mal die Docs gelesen haben, um die Konzepte (wie eben Gruppen) zu verstehen. Sonst wirds vermutlich eher was instabiles am Ende, wo Du kein Spaß dran haben wirst.

Thema: Json Meldung mit Array aus Elementen verschiedener Typen parsen
Am im Forum: Datentechnologien

Bei typisierten Sprachen wie C# kann eine solche (De)Serialisierung nur gegen eine fest stehende Struktur funktionieren.
Hast Du eine dynamische Struktur musst Du entweder a) mit dynamic arbeiten, was also eine untypisierte Programmierung erfordert und damit auch alle Nachteile hat oder b) Du musst einen eigenen Parser für die Struktur bauen.

dynamic findet man eher in einfachen, risikoarmen Situationen; eigener Parser mit einer typisierten Endstruktur in komplexeren Fällen.
OOP kann Dir dabei helfen (zB durch Interfaces), dass eine Property verschiedene Elemente darstellen kann (Single Value vs Array).

Das Vorgehen in diesem Fall ist aber durchaus "simpel". Hat man bei Messaging-Systemen oft.
Deine Json im Endeffekt ist nichts anderes als ein Container


{
  "type" : "MyTypeA"
   "data" : dynamicBody
}

- data stellt dabei den dynamischen Inhalt dar, dieses Feld existiert immer
- type ist die Beschreibung, was in data steckt. Dieses Feld existiert immer und der Type hat immer die gleiche Struktur.

Dann kannst im Endeffekt beide Vorgehensmodelle mischen.


string type = myDynamicJson.Type;
string body = myDynamicJson.Body;
if(type == "MyTypeA")
{
  MyClassForTypeA body = JsonConvert.DeserializeObject<MyClassForTypeA>(body);
}

Thema: VSC History regulärer Ausdrücke
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Du hast in Deinem Benutzerverzeichnis einen eigenen Ordner für Code
Windows %AppData%\Roaming\Code
Linux /home/<userid>/.config/Code/

Welche Datei kannst, wenn unverschlüsselt, ja einfach durchsuchen und selbst raus finden.
Kannst Deine Erkenntnisse ja hier gerne mitteilen.

Thema: Wie aktuell ist C#?
Am im Forum: Smalltalk

Für mich riecht das sehr nach einem Troll-Thema, vor allem die Formulierung "absteigenden Ast".. 🤦‍♀️ - aber gerne immer wieder die Antwort dazu:
C# ist zum einen einer der beliebtesten Sprachen, gehört aber auch zu den reifsten, modernsten, effizientesten und aktivst weiterentwickelten Programmiersprachen.
Stack Overflow Developer Survey 2022

Zitat
oder es sich doch lohnt, diese tolle Sprache zu lernen?
Für nen Gärtner vermutlich nicht, für nen Programmierer vermutlich schon.

Thema: Parse "Sun Dec 13 03:52:21 +0000 2009" zu DateTime
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Interessant, das wusste ich so auch nicht. Danke für die Aufklärung.

Thema: Parse "Sun Dec 13 03:52:21 +0000 2009" zu DateTime
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Auch hier wieder ein Blick in die Docs.

"hh" bedeutet: The hour, using a 12-hour clock from 1 to 12.
Du hast aber "14", was bedeutet dass Du keine 12 Hour Clock hast, sondern 24. Daher muss es "HH" lauten und nicht "hh".

Thema: Parse "Sun Dec 13 03:52:21 +0000 2009" zu DateTime
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

"z" ist dokumentiert.

Zitat
Hours offset from UTC, with a leading zero for a single-digit value.
also pro Digit.

Edit, verdeutlichter formuliert:
"+0" ist "zz", weil ein z für das + steht.
"+00" ist daher "zzz"
und "+0000" muss daher "z" + "zzz" = "zzzz" sein.

Siehe auch Custom date and time format strings - Offset "z" format specifier

Thema: Parse "Sun Dec 13 03:52:21 +0000 2009" zu DateTime
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das Format muss schon dem entsprechen, was Du auch rein wirfst - das tut es ja nicht. Auch stimmen die Parameter nicht (siehe Docs).
Wild rumprobieren wird da nicht helfen. AssumeLocal darst zB nur verwenden, wenn Dein String keine Zeitzone enthält. Kann also niemals klappen.

Dein fffzzz muss einfach zzzz entsprechen. Deine Zeitzone ist schließlich 4 stellig und Millisekunden hast keine, also macht gar kein Sinn.

Erster Versuch mit den Hinweisen aus Custom date and time format strings - bin einfach nur die Tabelle durchgegangen und hab Format für Format übernommen. Hat 20 Sekunden gekostet ;-)


string date = "Sun Dec 13 03:52:21 +0000 2009";
string format = "ddd MMM dd hh:mm:ss zzzz yyyy";
CultureInfo provider = new CultureInfo("en-US");

if(DateTime.TryParseExact(date, format,  provider, DateTimeStyles.None, out DateTime dt))
{
   Console.WriteLine(dt.ToString("o"));
}

Klappt einwandfrei: 2009-12-13T04:52:21.0000000+01:00

Aber ja, statt einfach die Docs zu lesen kann man auch viel Zeit verschwenden und rumprobieren ;-)

Thema: Inhalt der Combobox wird trotz Data-Binding nicht aktualisiert
Am im Forum: GUI: WPF und XAML

Du darfst die ObservableCollection nicht neu zuweisen, sonst verliert das Binding die Referenz. Es ist einfach ein neues Objekt.
Willst Du den Inhalt einer ObservableCollection ändern, dann änder den Inhalt und nicht die ObservableCollection selbst.

Thema: Parse "Sun Dec 13 03:52:21 +0000 2009" zu DateTime
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Es gibt wirklich in .NET kaum etwas, das so gut dokumentiert ist, wie Zeitformate.

Die Dokumentation sind 44(!) Din A4 Seiten.
Custom date and time format strings

Thema: XAMARIN MySQL Datenbankverbindung wirft Exception
Am im Forum: Netzwerktechnologien

Zitat von Loofsy
Ok na wenn ich das schon rechtlich nicht darf dann mach ich es auch erst gar nicht. Ich danke dir
Also wie gesagt, die Aussage ist nicht pauschal, sondern das kommt drauf an, welche Daten Du hast.
Weil es gibt da so ne schwammige Klausel, dass Du "einen technisch sicheren Weg" wählen musst - und den wiederum kann man auslegen.
Aber de facto gelten Datenbanken, die direkt im Internet hängen, nie als "pauschal sicher".

Thema: SmtpClient MailKit und Office365 Two-Factor-Authentication (2FA)
Am im Forum: Netzwerktechnologien

Zitat von TirolerToni
Sind diese auch sicher bzw. wäre das ein brauchbarerer Lösungsansatz für meine Anwender?
Das musst Du selbst entscheiden; wir tragen keine Verantwortung für Deine Anwender.
Meine Meinung: alles, was mit SMTP zutun hat, ist nicht brauchbar und nicht mehr zumutbar. Und SMTP und "sicher" in einem Satz passt auch nicht mehr in die Zeit.
Zitat von TirolerToni
Jetzt hätte ich aber noch eine Frage was den Einsatz von so einem kostenlosen SMTP-Dienstleiter wie beispielsweise sendgrid.com angeht.
Es gibt de facto keine "nutzbaren" Dienstleister, die wirklich kostenlos sind. Warum sollten sie das auch anbieten?
Das sind alles Freemium Modelle für's Testen, entsprechend hast Du entweder a) super wenig Mails pro Tag/Monat oder b) einfach null Dinge, die man für einen sicheren E-Mail-Versand benötigt. Mit kostenlosen Angeboten würden sie sich Spammer ins Haus holen und ihr eigenes Produkt kaputt machen.

Du wirst akzeptieren müssen, dass Du Dich von SMTP verabschieden werden musst.
Es ist einfach eine obsolete, unsichere Technik, die verschwinden wird.

Thema: SQL Statement zu LINQ
Am im Forum: Datentechnologien

Zitat von Alesia
Die richtige Reihenfolge der Registrierung ist auch wichtig, das war mein nächster Fehler.
Dann stimmt was bei Dir nicht.
Die Reihenfolge der Registrierungen von Services - bei ASP.NET Core inkl Blazor findet das in ConfigureServices() statt - muss immer irrelevant sein, weil diese nicht garantiert ist (zB durch Fremdabhängigkeiten).
Die Reihenfolge der Middleware (also bei ASP.NET Core in Configure()) ist jedoch genau zu beachten.
ASP.NET Core Middleware Order