Laden...
C
Cornflake myCSharp.de - Member
IT-Techniker Bayern Dabei seit 04.05.2007 142 Beiträge
Benutzerbeschreibung

Forenbeiträge von Cornflake Ingesamt 142 Beiträge

08.08.2023 - 17:47 Uhr

Hallo

Umgebung:
Ein C# Programm (.exe) soll auf einem Windows Rechner ausgeführt werden und sich mit einem REST Service verbinden. Zur Anmeldung am REST soll ein Benutzername und Passwort eingegeben werden. Das Programm soll jetzt in Zukunft für diesen Rechner freigegeben sein und auch nach jedem Neustart ohne weitere Passworteingabe sich mit dem REST verbinden, solange nicht auf einen abmelden Button geklickt wird.

Problem:
Es soll sowas wie eine Lizenz für das Programm auf diesem einen Rechner vergeben werden. Wenn der Benutzer z.B. auf nur 3 Rechner das Programm nutzen darf, soll nach dem Anmelden auf einem 4ten Rechner die Meldung erscheinen, das der Benutzer nur für 3 Rechner eine Lizenz hat. Sollte einer der freigegebenen Rechner kein Internet haben, soll auch nach einem Neustart das Programm auf dem Rechner lizensiert bleiben. Es soll sowas wie ein JWT Token benötigt werden, der nur alle x offline Tage, neu angefordert werden muss.

Teilprobleme:
- Wie kann ich per C# einen Rechner eindeutig identifizieren?
- Wie kann ich vom REST Service sowas wie eine Lizenz oder Zertifikat für den Rechner vergeben?
- Wie gebe ich die Lizenz nach der Deinstallation oder abmelden wieder frei?
- Wie kann ich remote eine Lizenz wiederufen?
- Wie verhindere ich, dass ein Benutzer sich selber eine Lizenz bastelt?

Weitere Fragen:
- Gibt es zu dem Thema schon fertige Bibliotheken?
- Habt ihr in der Richtung schon mal etwas entwickelt?
- Gibt es noch einfachere Wege so eine Lizensierung umzusetzen?

Beste Grüße
Cornflake

12.04.2022 - 17:49 Uhr

Thx Abt
Ok dann wäre Kubernetes oder k3s der nächste Schritt, damit die Umgebung einigermaßen gescheit für die Zukunft wird.
Hast du da evtl. einen guten Einstiegs Link der etwas auf meine Situation passt (Visual Studio, GitLab, 2 Stages, HTTPS öffentliches Zertifikat, Updatescript)?
Fühle mich in dem Bereich noch ziemlich als Anfänger, auch wenn ich schon froh bin über Traefik und mit Docker Compose die Grundversion zum Laufen bekommen zu haben.

12.04.2022 - 13:46 Uhr

Hallo Abt

Danke für deine Antwort.
Naja es ist ja auch keine große Umgebung. Nur ein Server.
Mit Kubernetes habe ich noch gar nichts gemacht. Ich vermute, dass Kubernetes erst bei mehreren Servern und umfangreicheren Settings benötigt wird.

Auf dem Entwicklungs PC entwickle ich unter Visual Studio mein Docker Projekt und debugge es mit Docker Desktop ohne öffentliches Zertifikat. Wenn lokal alles läuft, exportiere ich es und lade die webseite.tar.gz Image Datei auf den Server.
Auf dem Server läuft Linux und Docker. Dort stoppe ich aktuell von Hand den Container und lösche dann Container und Image. Danach lade ich die Image Datei in den Docker Hub und starte das Image als Container. Danach läuft alles auf dem neuesten Stand mit öffentlichem Zertifikat durch Traefik.
Zukünftig soll es die zwei Stages Dev und Prod geben. Aber ich habe nunmal nur einen einfachen Server und keine Serverfarm mit mehreren Clustern etc.

In Zukunft wäre noch ideal, nachdem ich den Code, per Git Commit auf einen GitLab Account geladen habe, dann GitLab den Docker Container auf den neuesten Stand bringen würde, mit kompilieren, tests, als Image packen, altes Image sichern, und mit Freigabe als Produktiv Version, Container starten, etc.

Wegen docker commit bzw. docker tag. Ist dass dann eine richtige Kopie des Images oder nur so ein flaches Container Abbild mit anderem Namen, dass trotzdem auf das alte Image nur mit zusätzlicher "Zwiebel"-Schicht verweist?
Für mich sind die Images gewissermaßen eine calc.exe während der Container eine laufende calc.exe mit eingegebenen Werten und Verlauf darstellt. Wenn der Server neu starten muss, wird vom Image wieder neu der Container ohne die alten Werten geladen. Daher die calc.exe neu geöffnet. Volumes der Container persistieren dann nur die Daten zwischen den Containerausführungen und können einen Zugriff ausserhalb des Container ermöglichen. Sehe ich das richtig?

11.04.2022 - 21:37 Uhr

Hallo Leute

Für die Verwaltung von zwei Docker Container Webseiten unter Traefik in Produktiv und Development bräuchte ich zwei Tipps.
Zum Einen, wie die docker-compose.yml Datei für die Verwaltung der beiden Webseiten Container zu konfigurieren ist.
Zum Anderen, wie ich ein Script schreiben kann, dass automatisch aus der aktuellen development Image Version einen neues produktiv Image kopiert und das alte produktiv Image archiviert. Vmtl muss ich erst Thema 2 kapieren, bevor Thema 1 funktioniert.

Thema 1 docker-compose.yml

Aktuell läuft auf meinem Linux Server ein Docker Hub auf dem eine docker-compose.yml Datei folgende Zusammenstellung erzeugt.
Es wird ein Traefik Image geladen, dass sich für den https Zugang ein letsencrypt Zertifikat holt.
Unter einer speziellen URL wird dann mein Webseiten Image als Container zur Verfügung gestellt.
Zukünftig soll es eine Kopie als Produktiv Version von diesem geben. Dann kann ich Features im development Image testen und das produktiv Image nur wenn alles passt aktualisieren. Ich konnte schon rausfinden, dass ich mit profiles:["prod"] z.B. ein produktiv Profil in Docker Compose definieren kann. Aber ich vermute, ich brauche unterschiedliche Ports für den development Container, wenn ich im produktiv Container den Port 443 verwende.

Daher folgende Docker Szenario soll es geben:

  1. Traefik Container ist von außen erreichbar.
  2. Produktiv Webseiten Container ist unter der URL https://www.domain.de/webseite erreichbar.
  3. Development Webseiten Container ist unter der URL https://www.domain.de/dev/webseite erreichbar.

Mein Problem beide Container sollen unter dem Port 443 erreichbar bleiben nur die Url soll anders sein. Ich habe dazu auch schon unterschiedliche "traefik.http.routers.webseite.rule=" Werte konfiguriert.
Gibt es zu diesem Aufbau evtl. schon Tutorials oder Beispiel Compose Dateien?

Thema 2 Kopierscript

Das Script soll idealerweise folgende Schritte durchführen:

  1. Produktiv Container stoppen
  2. Produktiv Image mit aktuellem Datum in Archiv Ordner verschieben
  3. Development Image kopieren als neues Produktiv Image
  4. Produktiv Container starten.

Ich hoffe ihr habt so etwas schon mal umgesetzt und könnt mir evtl. ein paar Tutorial Links senden.
Unter Google habe ich bisher nichts gefunden, dass zu meinem Fall passt oder ich verstanden habe. Es gibt unter Docker ja export und save sowie load und import Befehle. Aber wie ich eine Kopie vom webseite:latest Image mit anderem Namen z.B. webseite_prod:latest erzeuge habe ich nicht verstanden.

Grüße Cornflake

28.11.2019 - 15:17 Uhr

Habs hinbekommen 😃
@MrSparkle Danke für den Link. Bin in diesem Angularbereich noch Anfänger. Bin eher in der Windows-Forms Welt unterwegs.

Hier die Lösung:
Zum Stichwort Two-Way Data Binding.
Im Codeblock wird eine Variable benötigt, die den aus der html Dropdown Liste ausgewählten Wert aufnehmen kann. Diese Variable wird mit @bind an das Control gebunden. Danach kann diese Variable auch im onclick angegeben werden.


@page "/konfigurationen"

<select name="Konfigliste"  @bind="selectedKonfig" >
        @foreach (var konfig in konfigs)
        {
            <option value="@konfig.Name">@konfig.Name</option>
        }
    </select> 

<button class="btn btn-primary" @onclick="@(e=> runKonfig(e, selectedKonfig))">Ausführen</button>

@code 
{
private string selectedKonfig = "";    //Neu !!!

private void runKonfig(MouseEventArgs e, string Konfigname)
    {
     //...  
    }
}

28.11.2019 - 10:32 Uhr

Danke Abt für deine Hinweise.
Die @page Zeile hatte ich vergessen mit in den Codeausschnitt zu übernehmen und den Methdenname habe ich angepasst. Leider ist die Fehlermeldung noch gleich geblieben. Ich hatte in dem offiziellen Blazorbeispielprojekt zu der Counter.razor Seite eigene Klassen und diese Seite hinzugefügt. In der Klasse "Konfig" gibt es die Eigenschaft "Name"


@page "/konfigurationen"

<select name="Konfigliste">
        @foreach (var konfig in konfigs)
        {
            <option value="@konfig.Name">@konfig.Name</option>
        }
    </select> 

<button class="btn btn-primary" @onclick="@(e=> runKonfig(e, Konfigliste.value))">Ausführen</button>

@code {
private void runKonfig(MouseEventArgs e, string Konfigname)
    {
     //...  
    }
}

Wenn der Button geklickt wird, soll im Code Block die runKonfig() Methode mit dem in der Dropdown Liste ausgewählten Wert aufgerufen werden.
Das funktioniert nicht da Konfigliste.value einen Fehler auslöst.


error CS0103: Der Name "Konfigliste" ist im aktuellen Kontext nicht vorhanden.

@pinki: Swift ist ja richtig Sprachflexibel 😃
Grüße
Cornflake

27.11.2019 - 18:09 Uhr

Hallo Leute

Ich habe folgenden html code in Blazor:


<select name="Konfigliste">
        @foreach (var konfig in konfigs)
        {
            <option value="@konfig.Name">@konfig.Name</option>
        }
    </select> 

<button class="btn btn-primary" @onclick="@(e=> setAusführen(e, Konfigliste.value))">Ausführen</button>

@code {
private void setAusführen(MouseEventArgs e, string Konfigname)
    {
     //...  
    }
}

Wenn der Button geklickt wird, soll im Code Block die setAusführen() Methode mit dem in der Dropdown Liste ausgewählten Wert aufgerufen werden.
Das funktioniert nicht da Konfigliste.value einen fehler auslöst


error CS0103: Der Name "Konfigliste" ist im aktuellen Kontext nicht vorhanden.

Was muss ich hier ändern, damit das funktioniert?

Grüße
Cornflake

15.01.2019 - 20:24 Uhr

Danke euch beiden, dass waren eigentlich die Antworten die ich mir erhofft hatte.
@Th69 Danke für den Code. Hab den noch nicht ganz verstanden. Werde dazu ein Tutorial suchen.
@Taipi88 Super Antwort.
Das Singleton Pattern hatte ich bisher eigentlich nur mit einer Mutaxe verwendet um zu verhindern, dass eine Winforms Anwendung mehrfach gestartet werden kann. Aber die 6 verschiedenen Arten die hier detailiert beschrieben werden kannte ich so noch nicht. Als nächstes kommt jetzt Microsoft.Extensions.Configuration reinlesen dran.
Wg b) ich werde es vmtl. mit Referenzierung auf Zuführung zu lösen versuchen. Hatte gehofft es gibt da noch einen andern Weg.
Hab inzwischen bemerkt, dass in meinem ursprünglichen Problem der Fehler war das p.dateipfad nicht geht, weil ich es nicht innerhalb einer Methode geschrieben hatte.

15.01.2019 - 13:30 Uhr

@MrSparkle nein das habe ich gelöst. Nur hätte ich gerne die Klasse anders strukturiert. Dieses strukturieren hätte ich aber auch gerne generell besser verstanden.
Mit geht es um das zugreifen auf Methoden und Eigenschaften von anderen Zweigen aus und wie man die am besten Klassentechnisch erstellt. Bisher habe ich nur Namespace Verschachtelungen gefunden und Klasse in Klasse. Das wiederstrebt mir nur etwas. Da ich am liebsten je Datei nur eine Klasse haben würde.
Wie mache ich es, dass ich überhaupt richtig hinbekomme eine Klassenunterstruktur zu erstellen.
Also wie bei der MS Settingsklasse mit: App.Default.Eigenschaft. Bei mir ist das aktuell im Vergleich dazu App.Eigenschaft. Wie bekomme ich die Eigenschaft in einen Default Zweig in der Klasse bzw. wie müssen die Klassen verbunden werden, damit das so aussieht und sauber funktioniert bzw. zugreifbar ist.

Und wenn das richtig aufgebaut ist, wie kann ich dann in: Basisklasse.Unterklasse1.Methode1()
zugreifen auf: Basisklasse.Unterklasse2.Eigenschaft1()

@abt Danke für Link. Wird vmtl. nicht meine Lösung komplett ablösen können, aber vllt. für weitere Fälle doch eine Alternative sein.

15.01.2019 - 10:16 Uhr

Nagut ich hole weiter aus.
Die Microsoft Settings Klasse kann ich um eigene Werte(Eigenschaften) erweitern und dann die Konfiguration in einer Datei persistent ablegen. Die selbst hinzugefügten Eigenschaften sind bei der Settings Klasse gut strukturiert in dem App1.Default.<Eigenschaft> Zweig zu finden. Zusätzlich bietet die Klasse noch einige Methoden um die Eigenschaften zu laden und zu speichern. Allerdings hat die für meinen Bedarf ein großes Manko. Die Einstellungen werden als XML abgelegt und dann noch im Benutzerordner (je nachdem, ob es eine Benutzereinstellung oder Anwendungseinstellung ist). Ich habe dazu mir schon eine Lösung geschrieben, mit der ich die Einstellungen in einem individuellen Ordner serialisiert ablegen kann. Allerdings fehlt mir die Strukturierung wie bei der settings Version. Bei mir liegen die Eigenschaften in der gleichen Ebene wie die Methoden zum Speichern Laden, etc.

Daher ich würde von euch nur gerne wissen, wie kann ich so eine Strukturierung ordentlich bewerkstelligen. In der abgeleiteten Klasse sollen die neu hinzugefügten Eingenschaften, die zu serialisieren sind liegen und in den Unterzweigen die Methoden zum Laden ,Speichern, etc. und noch ein paar weitere Eigenschaften. Dabei würde ich gerne auch aus dem Unterzweig1 auf Eigenschaften vom Unterzweig2 der abstrakten Klasse zugreifen können.

Zum Schluss will ich wieder die abstrakte Klasse verwenden, die mir die Möglichkeiten bietet alle Werte der abgeleiteten Klasse zu serialisieren.

14.01.2019 - 19:16 Uhr

Mir geht es nicht darum mich nicht mit OOP zu beschäftigen. Ich habe nur vor die Eigenschaften und Methoden anders zu strukturieren, damit bestimmte Werte sich nicht überschneiden bzw. in einer langen Liste untergehen.

Wie würdet ihr es anstellen bestimmte Methoden/Eigenschaften in diesem Fall zu strukturieren. Habt ihr ein Quellcodebeispiel?

14.01.2019 - 17:47 Uhr

Nein ich will nicht mit new und overide bei Namensüberschneidungen arbeiten müssen und mit base kann ich zwar aus der abgeleiteten Klasse auf Eigenschaften der Basisklasse zugreifen aber nicht aus der Maschinenklasse auf die Zuführungklasse, da die ja nicht voneinander abgeleitet sind.

14.01.2019 - 17:28 Uhr

Hallo Abt

Ich versuche es mal genauer zu beschreiben, da ich eine allgemeine Lösung suche und bisher in den Microsoft Docs nur etwas mit verschachtelten Klassen und Namespaces gefunden habe, dass aber nicht ganz dem entspricht was ich vorhabe. Aktuell habe ich eine abstrakte Klasse mit einigen Methoden und Properties.


class abstrakt Dateikonverter {
	public string Quelldatei {
		get;
		set;
	}
	public string Zieldatei {
		get;
		set;
	}
	public string Konverterbeschreibung {
		get;
		set;
	}
	//... es folgen noch einige weitere Properties

	public void Laden() {
		// Verwendet Quelldatei und weitere Properties zum Laden der Datei
	}

	public void Konvertieren() {
		//Verwendet verschiedene Properties
	}

	//... Es folgend noch einige weitere Methoden
}

Von der oben genannten Klasse leite ich jetzt ab und erstelle einen Konverter für MaschineTyp1.

class Dateikonverter_MaschineTyp1: Dateikonverter,
IWerkzeuge,
IMaterial {
	Konverterbeschreibung = "R11,G09,03,L18";
	public Werkzeug tool1 {
		get;
		set;
	}

	//Es folgen noch weitere neu hinzugefügte Properties
	//Es kommen noch ein paar Methoden dazu.
	//Die Methoden benötigen teilweise Properties aus des Basisklasse und einer parallel dazu existierenden weiteren Zubehörklasse.
}

Jetzt ist das Problem, dass sich meine Methoden der abstrakten Klasse auf der selben Ebene befinden, wie die der fertig nutzbaren Klasse. Wenn ich die verwenden will gehen mir evtl. ein paar Methoden unter oder sie überschneiden sich vllt sogar vom Namen her.
Mein Ziel ist es das ganze zu strukturieren mit Ebenen.

Statt:


//...
void Vorbereiten() {
	Dateikonverter_MaschineTyp1 MaschineKT1 = new Dateikonverter_MaschineTyp1();
	MaschineKT1.Quelldatei = "testdaten.txt";
	MaschineKT1.Zielldatei = "RUU88.jy";
	if (MaschineKT1.tool1 == Werkzeuge.FR01) { //...}

		//Es folgen weitere Zugriffe auf verschiedene Properties immer überMaschineKT1.<Property>
	}
	//...
}

Ziel ist es die Zugriffe auf die Basis Properties in eine andere Ebene z.B. Default zu bringen.
z.B.


//...
void Vorbereiten() {
	Dateikonverter_MaschineTyp1 MaschineKT1 = new Dateikonverter_MaschineTyp1();
	MaschineKT1.Default.Quelldatei = "testdaten.txt";
	MaschineKT1.Default.Zielldatei = "RUU88.jy";
	if (MaschineKT1.tool1 == Werkzeuge.FR01) { //...}

		//Es folgen weitere Zugriffe auf verschiedene Properties die je nachdem ob es Standardeigenschaften/Methoden sind, z.B. über MaschineKT1.Default.<Property> erreichbar sind oder eben über MaschineKT1.<Property> wenn es individuelle Eigenschaften und Methoden sind.
	}
	//...
}

Ich hoffe das Problem wird klarer. Zudem kommt es vor, dass ich bei Strukturieren dann in Methoden von Dateikonverter_MaschineTyp1 auf Eigenschaften von Dateikonverter_ZuführungTyp2 zugreifen will. Also neben dem Default Zweig noch einen Zuführungszweig haben will der z.B. mit MaschineKT1.Zuführung.<Property> angesprochen werden soll.

Beste Grüße
Cornflake

14.01.2019 - 15:23 Uhr

Hallo Leute

Ich habe ein Problem, mit einer selbstgeschriebenen abstrakten Klasse.
Bei Microsoft gibt es ja die App1.settings Dateien. In denen kann man eigene Eigenschaften definieren auf die man wiederum in C# über Assemblyname.App1.Default.MeineEinstellung1 zugreifen kann. Daher es gibt Methoden die in Assemblyname.App1 untergebracht sind und weitere eigene Eigenschaften, die in App1.Default.MeineEinstellung1 untergebracht sind. Mir geht es hier um die Strukturierung der Klasse.

Selber habe ich vor eine abstrakte Klasse so zu strukturieren, dass ich eine Klasse mit Zusatzmethoden erstellen kann, die von der abstrakten Klasse abgeleitet wird und dann über die abgeleitete Klasse in zwei Unterzweigen weitere Methoden und Eigenschaften zur Verfügung stellt. In vereinfachter Form sieht das wie unten aus. Allerdings kann ich im Zweig M nicht auf Eigenschaften im Zweig P zugreifen und es stehen in der abgeleiteten Klasse keiner der beiden Zweige zur Verfügung.


public class toolabstrakt {
	public P p;
	public M m;
	public toolabstrakt() {
		p = new P();
		m = new M(ref p);
	}
}

public string Ver {
	get;
	set;
}


public class P {
	public string dateipfad {
		get;
		set;
	} //hier wird dann noch auf eine interne Variable verwiesen
	public string dateiformat {
		get;
		set;
	} //hier wird dann noch auf eine interne Variable verwiesen
}


public class M {
	P p;
	public M(ref P p) {
		this.p = p;
	}

	public string Convert() {
		string inhalt = File.ReadAllText(p.dateipfad);
		//...
	}
	//...
}

Wenn ich jetzt von der abstrakten klasse ableiten will kann ich nicht auf m oder p zugreifen. Selbst wenn ich davon noch Felder mit p{get;set;} und m{get;set;} dazu anlege.


public class mytool: toolabstrakt {
	p.dateipfad = "test.txt"; //geht nicht
	string werte = m.Convert(); //geht nicht
}

Ich hoffe ich konnte mein Problem verdeutlichen. Irgendwie stehe ich aufm Schlauch. Bitte aber keine Diskussion warum das ganze überhaupt strukturieren, etc.

Beste Grüße
Cornflake

07.09.2017 - 18:50 Uhr

@abt, was wäre deiner Meinung nach der nächste konstruktive Schritt?

Ich bin noch am überlegen, evtl. den Webserver Dienst auf dem Server als Docker Anwendung zu verpacken, würde da IIS auch gehen? Habe selber dazu noch keine Erfahrung.
Bzw. was haltet Ihr von IIS Express?

06.09.2017 - 17:06 Uhr

Danke Leute für eure Hinweise

@gfoidl Vielen Dank für deine konstruktiven Ideen.
Ja so in der Art müsste sich ein Großteil lösen lassen.
Dateien lesen schreiben und packen, würde ich dann von einem eigenen eingerichteten Webserver auf dem Filialistenserver mit Schreibrechten auf Netzlaufwerke übernehmen lassen.

Einzig der COM-Port Zugriff würde eine zusätzlichen SW auf dem Clientrechner benötigen.

Wegen Webserverdienst hatte ich zuerst an einen Apache gedacht. IIS wäre mir zu komplex. Aber gibt es da unter C# evtl. etwas abgespeckteres? So eine art embedded Webserverdienst, den ich in einem eigenen Programm verwenden kann?
Dann wüste ich auch unter C# wie ich Linq nutzen könnte. Bei Apache hätte ich dazu keine Ahnung.

06.09.2017 - 16:04 Uhr

@gfoidl, das mit dem vorinstallierten .net framework hatte ich auch schon beim "Product Owner" angefragt, aber bis jetzt haben sich die Anforderungen nicht geändert.

Für den Hintergrund. Es soll eine Anwendung geschrieben werden, die ein Filialist auf seinen Rechnern ausführen kann. Das können u.a. reguläre Windows 7 PC sein, aber leider auch Windows XP oder POS Kassensysteme die aber eigentlich auch ein Windows haben sollten. Zur Verteilung wird dann von einem Server aus das Programm aus einem Netzlaufwerksordner heraus an die Systeme per kopieren verteilt. Es kann sein, dass die SW danach nicht mal mehr lokale Schreibrechte auf dem Rechner hat.
Daher bin ich aktuell schon am überlegen, die GUI vllt. als Webseite von einem Server aus auszuliefern.

06.09.2017 - 15:09 Uhr

Ok das mit dem Reportviewer muss ich dann wohl ausklammern.

Wäre es denn möglich z.B. auf einem Windows 7 System, dass das .net Framework 4.6.2 nicht installiert hat, dieses Framework z.b. einfach in einem Unterordner entpackt mitzuliefern und dann mit einem speziellen Aufruf die exe mit dem Framework zu starten?

Hab gerade gelesen, unter Java soll es möglich sein auf z.B. einem USB Stick die JRE entpackt mit drauf zu kopieren und dann eine Java Anwendung so direkt vom Stick startbar zu machen.

06.09.2017 - 14:22 Uhr

Wäre sowas in reinem C++ möglich (kein .net C++)?
Mir ist gerade noch Elektron eingefallen, wäre das etwas oder müsste dazu auch irgendwas im Vorfeld installiert worden sein?

06.09.2017 - 14:10 Uhr

Hallo Leute

Ich suche eine Möglichkeit ein C# Programm zu erstellen (paketieren), das die unten genannten Features hat und nur durch einfaches kopieren in einen Ordner installiert wird.
Wichtig es darf kein bestimmtes installiertes .net Framework vorausgesetzt werden. Bzw. es dürfen keine weiteren Abhängigkeiten voraus gesetzt werden.

Folgende Features soll das Programm haben:

  • Es soll eine grafische Bedieneroberfläche anzeigen.
  • Es soll Dateien lesen und schreiebn können.
  • Es soll Berichte anzeigen (reportviewer).
  • Es soll Dateien packen können.
  • Es soll auf COM Ports zugreifen können.
  • Es soll Daten drucken können.
  • Es soll Linq unterstützen.

Aktuell ist ja .Net Core im kommen, das Self-contained deployments (SCD) unterstützt, nur schein dieses auch wieder native dependencies of .NET Core vorauszusetzen und es wird aktuell keine GUI Entwicklung mit unterstützt.

Am einfachsten wäre ein einfaches WinForms Programm, nur das setzt immer ein bestimmtes vorher installiertes .net Framework voraus. Schön wäre hier eine Packmöglichkeit, in der das verwendete Framework mit eingepackt wird.

Die .exe Datei darf auch dafür gerne Bytemäßig größer sein.

Habt ihr eine Idee?

Gibt es dazu in anderen Sprachen evtl. eine Lösung? Java, C++

Vielen Dank und Grüße
Cornflake

15.02.2017 - 14:06 Uhr

Hatte bisher VS2008 und .net 3.5 im Einsatz. Daher war das letztlich ein ziemlicher Sprung.

15.02.2017 - 12:22 Uhr

@MrSparkle
Das .net 4.6.1 habe ich noch nicht so lange im Einsatz. Stimmt da gibts doch schon Tuples 8o. Hatte die bisher noch nicht gesehen/genutzt.
thx 😁

14.02.2017 - 16:14 Uhr

Kannst/Darfst Du Visual Studio 2017 und auch die C#7-Features nutzen?

Ja. Hab mir aber noch nicht alle Details angeschaut.
Werde die neue Version wohl erst ab März testen können.
Bin u.a. auch schon auf die Tuples gespannt.

14.02.2017 - 15:05 Uhr

Wegen dynamic werde ich mal googeln thx 😃.

Ansonsten freue ich mich eh schon auf den 7.3.17

14.02.2017 - 14:42 Uhr

verwendetes Datenbanksystem: C# 4.6.1 Linq

Hallo

Befehle wie:


...
var erg = from z in quelle
               where z[1].Length > 1
               select new  { z[0], z[2]  };
...

sind ja äußerst praktisch.

Aber wie kann ich "erg" als Parameter an eine andere Methode übergeben?

Problem:
Ich habe habe eine Methode in der Dateien als Tabellen eingelesen werden, dann mit 3 Linq Befehlen vorbereitet werden und dann für 2 Ausgaben wieder mit Linq ähnlich oben geändert werden. Inzwischen müssten da noch mehr Ausgaben per Linq erzeugt werden. Nur in einer Methode finde ich das zu unübersichlicht. Daher aus:


Auswerten(){...}

...soll jetzt werden:


Auswerten_Eingabe(){...}
Auswerten_Vorbereitung(tabelle1,tabelle2){...}
Auswerten_Ausgabe(tabelle,Filter){...}

Nur wie kann ich da die Linq Tabellen übergeben?

Beste Grüße
Cornflake

30.01.2017 - 18:40 Uhr

LaTino

Danke für deinen Tip. 😁
Konnte mich da wohl gedanklich von Linq zu wenig lösen.
Das mit dem ForEach direkt als Ausgabestring klappt super.

30.01.2017 - 13:11 Uhr

verwendetes Datenbanksystem: Linq

Hallo Leute

Vllt könnte ihr mir mit einem Linq Befehl helfen.
Als Anforderung soll ich ein Tabelle erzeugen, die eigentlich der dritten Normalform einer Tabelle wiederspricht und bei der ich nicht weiß wie ich die mit Linq realisieren könnte.

Wie in dem Thementitel beschrieben, gruppiere ich in einer Tabelle Spalten und als Aggregatsfunktion sollen in einer Ergebistabelle die Gruppenzeilen als Spalten ausgegeben werden.

Quelltabelle:


Gruppe; ID ; Menge
1;A1;1
2;B1;1
2;B2;2
3;C1;1
3;C2;2
3;C3;3
...

Ausgabetabelle:


//Kopfzeile ist nur optional
Gruppe ; ID Menge1;ID Menge2;ID Menge3;...
1;A1 1
2;B1 1;B2 2 
3;C1 1;C2 2;C3 3
...

Mein bisheriger Linq:


var erg = from e in Quelltabelle
               group e by e.Gruppe into Grp
               orderby Grp.Key.Gruppe
               select new
                 {
                    Grp.Key.Gruppe,
                    ID_Menge =  Grp.Select (s => s.ID + " " + s.Menge)
                 }

Nur wie mache ich daraus eine CSV Datei?

Beste Grüße
Cornflake

19.01.2017 - 17:38 Uhr

Jeah funzt 😃 THX MrSparkle

Gibts das eigentlich auch in der nicht ".funktionsname(...)" Schreibweise?

19.01.2017 - 16:16 Uhr

verwendetes Datenbanksystem: Linq C#

Hallo Leute

Habe folgende Quelltabelle:


SP1; SP2    ; SP3   ; SP4
1  ; A      ; Text1 ; Text2
2  ; A B    ; Text3 ; Text4
3  ; A B C  ; Text5 ; Text6

Daraus soll durch ein Splitting in Spalte 2 Zeilenduplikate als folgende Zieltabelle entstehen:


SP1; SP2; SP3   ; SP4
1  ; A  ; Text1 ; Text2
2  ; A  ; Text3 ; Text4
2  ; B  ; Text3 ; Text4
3  ; A  ; Text5 ; Text6
3  ; B  ; Text5 ; Text6
3  ; C  ; Text5 ; Text6

Leider konte ich durch google , suche.. kein Beispiel bisher dazu finden.

Wie nennt man sowas, bzw. wichtiger, wie lautet der passende Linq Befehl.

Folgender Befehl geht in die richtige Richtung, passt aber noch nicht ganz, da die restlichen Spalten nicht passend mit dupliziert werden.


var  x = from s in Quelltabelle
             select new 
            { 
              SP1 = SP1,
              SP2 = SP2.split(' '),
              SP3 = SP3,
              SP4 = SP4
            }

Beste Grüße
Cornflake

14.12.2016 - 19:37 Uhr

@Abt: Danke für deine Meinung und Hilfen. Das Video Google ich.
Allgemein stimme ich dir zu, erst Requirementanalyse, dann Entwurfsplanung, dann Umsetzung, dabei dann immer wieder Gegenprüfen, ob sich nicht Requirements geändert haben.

Meine grundlegenden Requirements weiß ich. Mein Problem, dass ich mich nicht mit allen verfügbaren Technolgien in der C# Welt auskenne. Und ich mir Wissen nur über Foren oder Bücher anlesen kann, bisher keine Kurse etc.
Daher bin ich auf der Suche, nach passenden Technologien und erarbeite mir gerade anhand von Prototypentwicklungen eine passende technische Umgebung.
Falls du ein Tipp hast wo es gute C# Kurse zu den Untertechnologien wie, Roslyn, Xamarin, REST, Linq, Angular2, Kestrel, ASP.Net, Visual Studio 2015 Projektmanagement, aktuelle Softwarearchitektur, Docker, Git, Best Practices der Projektverwaltung, etc. kennst, würde ich mich über Tipps freuen. Könnte da sehr viel Fortbildung gebrauchen.
Hatte bis vor kurzem z.b. nur Visual Studio 2008 für lokale Windows Forms Projekte im Einsatz. Seit dem hat sich einiges getan und ist gerade auch weiterhin im Wandel. Vor ca. 1,5 Jahren hätte ich behauptet nur WCF ist verbreitet und alle arbeiten mit SOA. Aktuell sprießen aber anscheinend vielerorts Microservices, Docker und Rest aus den Boden und Microsoft hat sich mit der Linuxfoundation verbündet. Zu Lernen gibt es nicht nur ein paar Bäume an Wissen, die sprießen, es kommen jährlich ganze Wälder dazu, die ein Jahr später teils obsolet sind und durch neue ersetzt werden.

Grüße Cornflake

14.12.2016 - 18:09 Uhr

Welche Frameworkversion sollte ich eigentlich für eine "Consolen App" verwenden, die ohne Gui läuft (Benutzung nur per externer Aufrufe als Dll oder über WCF). Die App soll nach Möglichkeit unter Windows Desktop/Server oder in einem Docker Container laufen können. Als Frontend, würde ich in Zukunft dann Electron verwenden wollen dass endweder lokal die App startet oder per Webservice remote darauf zugreift.

14.12.2016 - 16:29 Uhr

ist das kompliziert.... 🤔
früher gabs
.net full
.net compact und
.net micro
....

Auf der Webseite war ich, von dort habe ich den Aufruf.

Also wenn da steht standard 1.4 und in meinem projekt verwendet aber standard 1.2 dann gehts nicht.
Wie kann ich mit meinem Projekt auf 1.4 bzw. 4.3.0 kommen? Muss ich bei den Targets etwas rausnehmen?
Oder gibt es Updatemöglichkeiten damit ich auf Standard 1.4 komme?

Danke für eure Infos

14.12.2016 - 14:07 Uhr

Hallo Leute

Wenn ich IsolatedStorage installieren will für ein .Net Core Lib Projekt mit Targets zu .Net Framework 4.5, ASP.NET Core 1.0, Windows 8, Windows Phone 8.1, Xamarin.Android und Xamarin.iOS (Target .NETPlattform Standard) bekomme ich eine Fehlermeldung.

Aufruf:
PM> Install-Package System.IO.IsolatedStorage

Fehlermeldung:
Install-Package : Could not install package 'System.IO.IsolatedStorage 4.3.0'. You are trying to install this package into a project that targets '.NETPortable,Version=v4.5,Profile=Profile111', but the packag
e does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
At line:1 char:16

  • Install-Package <<<< System.IO.IsolatedStorage
    • CategoryInfo : NotSpecified: (:) [Install-Package], Exception
    • FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

Was muss ich tun, damit sich der Isolated Storage installieren lässt?

Grüße
Cornflake

18.11.2016 - 15:17 Uhr

8o 8o 8o
Peinlich. Ich glaube witte du hast Recht. Das habe ich voll übersehen und würde alles erklären. Daher auch keine Fehlermeldungen etc.
Werde ich gleich mal testen.

@cat: Danke für den Verbesserungstipp, werde ich auch mit einfließen lassen.

18.11.2016 - 14:53 Uhr

Hallo Leute

Ich habe in C# eine Datei mit 1,7 Millionen Zeilen a 45 Zeichen Länge eingelesen.
Danach selektiere ich bestimmte Zeilen und gruppiere sie.
Danach bleiben ca 1,5 Millionen Zeilen übrig.

Wenn ich aber beim where Teil eine Methode zur Prüfsummenberechnung aufrufe bleiben immer nur 69.998 Zeilen übrig.
Die Methode selber sollte höchstens 100.000 Einträge abweisen und wenn ich von Hand fehlende Einträge nachprüfe, werden die akzeptiert.
Auch wenn ich die Datei über eine for-Schleife durchlaufen lassen, lässt die Methode nur ca 100.000 Einträge weg.

Daher innerhalb des Linq ergibt die Methode Fehler.
Warum?

Quelldatei:


1888888888 BLAblablsaBLAblablsblablablablalba
2888888888 BLAblablsaBLAblablsblablablablalba
3888888888 BLAblablsaBLAblablsblablablablalba
4888888888 BLAblablsaBLAblablsblablablablalba
... ca. 1,7 Millionen mal

Quellcode:


 string[] q1 = File.ReadAllLines("Quelldatei.txt");

var v1 = from z in q1
                     select new
                     {
                         zahl = z.Substring(1, 10).Trim(),
                         text = z.Substring(11).Trim()
                     };

var v11 =  from s in v1
                      where 
                      isBerechnungOk(s.zahl, 10) && //Hier Fehler!
                      s.zahl.Length == 10
                      orderby s.zahl
                      group s by s.zahl into sGrp
                      select new
                      {
                          zahl = sGrp.Key,
                          text = sGrp.First().text
                      }  ;


//Ohne  isBerechnungOk = 1550314
//Mit     isBerechnungOk = 69998 
Console.WriteLine("zeilen: " + v11.ToList().Count.ToString());
Console.ReadKey();


Wenn benötigt, kann ich die Methode posten, ist aber etwas länger. Die Methode verwendet nur int,string datentypen und forschleifen mit % Berechnung.

Hat jemand eine Ahnung warum? Gibt es in Linq einen Stacküberlauf, kann ich für Linq einen Wert erhöhen?

Grüße Cornflake

15.11.2016 - 16:49 Uhr

Sorry Abt
Danke für deinen Tipp.

An sich eine sehr interessante Idee so html/js Zugriff auf weitere Ressourcen zu geben.
Hatte es gelesen aber so verstanden, dass dafür auch npm als runtime/webserver installiert werden muss. Wenn ich es jetzt aber richtig verstehe wird für das Endbenutzerpaket alles in eine ca. 50 MB große exe Datei gepackt (abgespeckter browser, js, html, bildressourcen, etc. ), die direkt ausgeführt werden kann.

Woanders habe ich jetzt noch etwas gefunden um anscheinend .net core auch mit anzubinden. Dann könnte das als Backend verwendet werden.
https://github.com/kexplo/electron-edge

14.11.2016 - 17:31 Uhr

Thx für eure Infos

Wegen nativ. Darunter verstehe ich, da ja auf einem Windows System schon das .net Framework installiert ist und ein C# Programm direkt mit vollen Zugriff auf die Systemressourcen (zumindest bezogen auf Datei laden speichern) arbeiten kann. Dagegen würde eine HTML Anwendung immer einen Webserver zusätzlich benötigen und könnte nicht direkt auf Dateien zugreifen.

@mfe Als Backend wäre es super wenn auf einem Windows XP Netbook kein IIS etc. vorher seperat installiert werden müsste. Linux ist nicht speziell angefordert, aber wenn Internetanbieter nur Linux zu Verfügung stellen, wäre es dann schon wieder eine indirekte Vorraussetzung.

Da das Backend durchaus eine Konsolenanwendung sein könnte, wäre .Net Core wie abt schon schreibt, vllt wirklich die beste Lösung für die Zukunft. Allerdings würde dann Windows XP für Altsysteme rausfallen, da XP bestimmt nicht mehr .Net Core unterstützt.

In wieweit lässt sich da Docker einsetzen? Wenn ich das richtig gelesen hatte, lässt sich .Net Core ohne weiteres innerhalb eines Docker Container ausführen. Damit sollte das Deployen in Bezug nur auf Internetanbieter und eigene Server doch leichter werden?

Ok für das Frontend wären dann individuelle Entwicklungen nicht zu umgehen.

14.11.2016 - 16:18 Uhr

Bei electron, wenn ich das auf deren Webseite richtig sehe, wird html und js verwendet um das in eine exe zu verpacken. Das wäre dann etwas für das Frontend?
Aber da will ich lieber auf c# und richtig nativen code setzen. Am liebsten mit Datagridview etc.

Was würde denn für das backend gehen?

14.11.2016 - 15:25 Uhr

@Abt
Für das Backend. Könnte man mit asp.net bzw. asp.net Core eine lokale Anwendung schreiben mit Zugriff auf lokale Dateien, oder Isolated Storage? Läuft die dann auch ohne IIS oder zusätzlichen installationen?

Würde dann über .Net Core RestFul Webservices mit Xamarin oder einem Standard Windows Programm dann die GUI dazu erstellen.

14.11.2016 - 14:16 Uhr

Hi mfr
Thx für deine Antwort.

Ja Backend schon. Bei Frontend ist eher eine komfortable/flüssige Bedienbarkeit wichtig. Daher will ich dort eher auf eine native und keine Web Lösung setzen.

AvaloniaUI schaue ich mir mal an.

Kannst du zu .NETCore RestFul Service einen Link empfehlen?
Bisher finde ich da nur etwas im zusammenhang mit asp.net
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api
https://github.com/tenor/RestBus/wiki/ASP.NET-Core-service-(RabbitMQ-callable)
RestFul sagt mir zwar etwas und .Net Core ist soweit ich verstanden habe, jetzt erst frisch rausgekommen aber ein schönes Tutorial mit Praxisbeispiel würde mir da fehlen und über google sehe ich da nur etwas in verbindung mit asp.net.

Active Directory wäre mir jetzt egal. evtl. würde ich die Dateien in einem Isolated Storage ablegen.

Ja Virtualisierung wäre auf dem Desktop dann auch nur eine Notlösung. Für die Internetanbieterversion fällt mir aber aktuell nur Docker ein.

14.11.2016 - 13:00 Uhr

Hallo Leute

Mit Xamarin kann man ja Programme schreiben, die auf Windows Store, Android Smartphone, Windows Phone und iOS Smartphone laufen. Zu so einer ähnlichen Anforderung suche ich eine Lösung.

Ich habe vor ein Programm zu schreiben das folgende Plattformen unterstützen soll:

Hardware: Netbook, Desktoprechner, Server im Haus, Server im Internet von fremden Anbieter

Betriebssysteme: Windows XP - Windows 10 unterstützt werden.

Vom Aufbau her will ich das Programm in zwei Teile gliedern:

  1. Backend:
    Programm, dass Dateien entgegennimmt, verarbeitet und wieder ausgibt.
    Ideal wäre es, wenn auch C# Quellcode Dateien übertragen werden könnten und diese dynamisch zur Laufzeit kompiliert werden würden.
    Läuft auf allen Plattformen

  2. GUI:
    Programm, dass Dateien und Verarbeitungsweise auswählen lässt.
    Läuft auf Netbook, Desktoprechner und kommuniziert mit Backend per WCF.

Daher es kann u.a. die Kombinationen GUI(Dekstop)-Backend(Desktop) oder z.B. GUI(Netbook)-Backend(Server Anbieter im Internet) geben.

Ideal wäre es, wenn ich zum Schluss z.B. eine Backend.exe/Backend.dll habe, die ich auf jede Plattform ohne Neukompilierung kopieren kann. Und eine Gui.exe die ich auf Netbook oder Desktop Rechner kopieren kann. Und dann mit der Verarbeitung beginnen kann.

Jetzt habe ich überlegt, mit welcher Technologie ich das machen kann und bin bisher auf .Net Core, Xamarin, Docker und WCF Selfhostet gestoßen.

Probleme:
.Net Core und Xamarin würden für Windows XP Systeme wegfallen evtl. komme ich da dann nicht um ein seperates Projekt rum, dass aber vllt trotzdem viel vom anderen Code wiederverwenden kann.

Für den Sereranbieter im Internet, habe ich bisher ein PHP WCF Lösung angestrebt, aber da ist dann das Debugging übelst. Daher dachte ich an einen Applicationserver wie der Tomcat für Java. Aber für .Net habe ich da nichts gefunden. Angeblich kommt dann der IIS von Microsoft zum Einsatz, aber eine asp.net Anwendung läuft ja wieder nicht auf einem Desktop Rechner und arbeitet auch ganz anders denke ich.

Am ehesten würde mir dann noch die Docker Variante gefallen für das Backend. Auf alle Rechner kommt VirtualBox in dem dann ein Dockercontainer ausgeführt wird. Aber ich glaube dass hat dann bei XP zu viel Overhead für die Virtualisierungsumgebung.

Habt Ihr eine Idee, womit/wie ich das am ehesten programmieren könnte?
Ziel ist es, das Programm gut debuggen zu können und nicht für jedes System neu schreiben zu müssen. Evtl. gibts ja was womit der Kern Quellcode gleich bleibt und nur Teile systemindividuell geändert werden müssen.

Grüße Cornflake

07.09.2016 - 15:20 Uhr

Ok habe es jetzt mit einen anderen Weg hinbekommen.
Endziel soll eine CSV Datei sein.
Mit dem Tipp: Best practices for serializing objects to a custom string format for use in an output file hat es geklappt.

@trib: Danke für den Hinweis mit der Klasse und dem Link 😃 hat weitergeholfen

06.09.2016 - 20:42 Uhr

Hi
habe das serialisieren in eine Klasse hinbekommen. Sogar mit der Liste.
Aber wie klappt das jetzt mit dem Umwandeln in eine DataTable?

05.09.2016 - 19:41 Uhr

System: C# 3.5 Datatable, newtonsoft JSON

Hallo Leute

Mal wieder son blöder Spezialfall.
Ich bekomme eine Jsondatei in der ein Array unterthalb des Hauptknotens existiert.
Die Jsondatei soll als Datatable deserialisiert werden und hat entsprechend auch eine per Relation verknüpfte Untertabelle. Nur wenn ich dass deserialisiere mit json, dann steht in der Unterverknüpfung nur System.String[] und es wird nichts in die Untertabelle geschrieben.
Hier der prinzipielle Aufbau:

Json Datei:


[
{
"id":11,
"titel":"blumen",
"menge":21,
"bezeichnungen":["rose","tulpe"]
},
{
"id":12,
"titel":"bäume",
"menge":"3",
"bezeichnungen":["birke","ahorn"]
}
]

Dataset:

dtHaupt 
- id   (int)
- titel (string)
- menge  (int)

dtSub
- id (int)
- bezeichnungen (string)

RelationHauptSub
-id (haupt)
-id (sub)

Code:


json = ...//Inhalt von Jsondatei
DataSet1.dtHauptDataTable testtabelle = JsonConvert.DeserializeObject<DataSet1.dtHauptDataTable>(json);

Anzeige der Datatable im Debugger:


id, titel, menge,bezeichnungen
11,blumen,21,System.String[]
12,bäume,3,System.String[]

Mir fehlt aber in der dtSub folgende Einträge


id,bezeichnung
11,rose
11,tulpe
12,birke
12,ahorn

Was muss ich im c# code ändern, damit es klappt?

Grüße Cornflake

23.06.2016 - 17:19 Uhr

THX
Ok scheinen einige Schritte zu sein, bis das läuft, aber mit der Anleitung machbar 😃

Genial wäre es ja noch wenn man direkt aus Visual Studio auf dem Raspberrypi mit .net Code debuggen könnte.

23.06.2016 - 15:46 Uhr

PInvoke wird nie als Verweis eingebunden. Das sind C++ DLLs, keine CLR. ok stimmt hast recht, dass ist dann wie bei SendMessage. Pro Methode ein Dllimport

Ich verwende kein Linux auf meinem PI, sondern Windows 10 IoT.

Zudem arbeitet man nie mit fixen Pfadangaben, sondern mit relativen oder über Configdateien.

Ja nutze das Raspian. Habe da das Mono Framework installiert.

Wenn Du wiringpi.dll in Google eingibst findest genug Treffer.
Sogar doch die genannten Wrapper. Überhaupt danach gesucht? Oder wolltest das Raussuchen an mich delegieren? 😉 Sorry nein wollte ich nicht. Hatte nur nach der Entwicklerseite gesucht (http://wiringpi.com/) und dort dann nichts zur Dll gefunden.

23.06.2016 - 12:24 Uhr

@Abt: Danke für deine Antwort.

Jetzt ergeben sich daraus doch noch ein paar Fragen.

  1. Sehe ich das richtig dass du dann den Code nur kompilierts und dann danach auf den Pi kopierst?

  2. Bindest du das wiringpi dann in Visual Studio als Verweis ein, bzw. wo muss die Datei stehen, dass du die per [DllImport("WiringPi.dll")] laden kannst? Habe eine wiringpi.dll auf der webseite aber auch noch nicht gefunden.

  3. Wo muss dann unter Linux die wiringpi.dll stehen oder geht dass dann nur über den auf der webseite beschriebenen git install weg?

  4. Wie machst du das in C# mit Pfadangaben, wenn du z.B. eine Datei laden willst. Unter Linux kannst du ja kein C:\tools\meintool\konfig.xml angeben.

  5. Gibt es eigentlich eine kostenlose Möglichkeit aus Visual Studio heraus direkt(über Netzwerk etc.) auf dem Raspberry pi ein C# Windowsform Programm zu debuggen?

Beste Grüße
Cornflake

22.06.2016 - 22:52 Uhr

Hallo Leute

Unter windows kann man ja mit Visual studio Programme schreiben, die auf dem Raspberry pi laufen. Sollen in dem Programm aber die GPIOs angesprochen werden wird das unter github verfügbare RaspberryPi.Net projekt benötgigt.

Kennst sich da jemand von euch aus, wie das statt für monodevelop für visual Studio eingebunden wird?

Grüße Cornflake

31.03.2016 - 19:15 Uhr

Super vielen Dank 😁 Wäre ich bei der Fehlermeldung nicht drauf gekommen.

Während ich in den anderen Projekten, jeweils x86 zum Debugen mit Edit & Continue eingestellt habe, war in der exe noch Any CPU aktiv.

Schade, dass man im Debug Modus nicht generell alles auf x86 CPU laufen lassen kann und dann beim Release erstellen automatisch auf Any CPU kompiliert. Dann könnte man zum Debuggen Edit & Continue verwenden und später im richtigen Einsatz auf Any CPU zurück greifen. So laufe ich aktuell gefahr, zu vergessen, dass beim Umstellen auf Release die "Any CPU" einzustellen.

Grüße Cornflake