Ne, Du machst aktuell kein MVVM, weil Du Dich im Code-Behind befindest und selbst Property-Werte zuweist.
Sowas nennt sich prinzipiell State Management und kann man viel einfacher zB Reactive Extensions oder ReactiveUI lösen.
Ansonsten kannst Du das auch alles mit MVVM Bordmitteln nutzen, musst dann nur achten wann Du wie welches VM initialisierst.
Ansonsten: MVVM richtig anwenden und diese Property-Zuweisungen lassen. Das fällt einem recht schnell auf die Füße, wenn man das nicht macht.
Ich versteh, wenn vor ein paar Jahren das wirklich als Smart bezeichnet wurde; aber "Smart" an dieser Stelle mit dieser Ineffizienz heutzutage gleichzustellen, passt vielleicht nicht mehr sooo gut. Auch ist es konzeptionell vielleicht bequem, aber nicht smart es doppelt laufen zu lassen.
Work - keine Frage.
.. das trifft alles auf Linq zu, leider hier jedoch auch der Faktor, dass es mindestens 100% ineffizienter zur Laufzeit ist, weil die Enumeration immer doppelt durchlaufen werden muss.
Nimm die Browser Developer Tools und schau Dir an, woher das Spacing kommt.
Es gibt ja nicht nur Margin, sondern auch Padding. Kann also sein, dass das Parent-Control hier ein Padding definiert.
Du hast hier in den Items mit py-8 ja auch überall ein Padding...
Zudem kann CSS ja auch Zeugs vererben, was bedeutet dass wir hier eh nur raten können - Du dagegen hast das Tool, wo man das auch sehen kann.
Also ich hab schon ein paar Custom AuthenticationStateProvider gesehen - aber noch nie sowas, wie Du es hast.
Wenn ich Dinge wie
accessToken != "\"\""
sehe oder auch das Base64 Zeug, dann schrillen so paar Alarmglocken bei mir. Das lädt ja de-facto dazu ein, dass das knallt oder exploitet wird.
Was soll das denn alles sein, ein hybrides Auth Modell?
Ansonsten auch keine Ahnung, was Dein Issue ist, weil Du es nirgends beschreibst.
Zitat von tomschrot
Das C# Team bei MS ist ziemlich konservativ und neuer Syntax kommt nur in kleinen Dosen.
Weiß nicht woher der Eindruck kommt - aber wir haben jedes Jahr eine neue C# Version mit teilweise sehr viel Änderungen; entweder neuer Syntax oder Syntaxzuckern. Sprache entwickelt sich weiter; altes Zeug wird natürlich nicht entfernt.
https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-12
Zudem ist es nicht "das C# Team bei MS" sondern das ist eine offene C# Design Runde; davon werden teilweise Leute von Microsoft bezahlt.
https://github.com/dotnet/csharplang
Zitat von tomschrot
@Abt: Wenn das alles so doof ist, frage ich mich, warum das dann in C# eingebaut wird?
Die NULL Operatoren sind schon sinnvoll, wenn sie richtig eingesetzt werden.
Oft führen Null Conditional Operators zu einem "cleaneren Code". In Deinem Fall werden sie jedoch inflationär eingesetzt - was genau das Gegenteil bewirkt und genau das Gegenteil der Idee der Einführung von sowas ist. Es ist in der Art sogar einfach nur kontraproduktiv. Salz in der Suppe is toll, nen Kilo auf 200ml jedoch nicht.
Man darf tatsächlich noch normale if-Conditions schreiben.. hier wäre es förderlich.
var enumerator = collection?.GetEnumerator ();
if(enumerator is not null)
{
enumerator.Reset();
while ( enumerator.MoveNext() )
{
var value = enumerator.Current;
...
}
}
Der Code ist effizienter, lesbarer und entspricht auch mehr Aspekten von Null Conditional Operators.
Sagenhaft, was man alles für ein simples if von den Language Designern so bekommt, wa?
Die wissen halt genau, was sie machen.
Was üblicherweise immer ein Issue bei Updates ist: das Windows SDK.
Das entweder manuell installieren oder was auch hilft die MAUI App einmalig starten, wenn Dein Visual Studio als Admin gestartet wurde.
Zusätzlich zu den Infos von Palladin: Microsoft WebView2
WebView2 ist quasi der Konkurrent zum Ressourcen-hungrigen Electron; auch das neue Teams basiert auf WebView2.
Ich hab jetzt tatsächlich nach 11 Jahren auch wieder mein erster Projekt, bei dem wir aufgrund der Gegebenheiten nicht nur eine Webseite, sondern auch eine Desktop-App mit Offline-Fähigkeit brauchen. Wir verwenden dazu auch WebView2 auf dem Desktop und lassen eine Angular-App mit WebView2 drin rennen.
Die allgemeine Empfehlung (also nicht nur in .NET) ist eher auf Web-Techniken zu setzen und native Lösungen wie WPF auf dem Desktop nur noch zu verwenden, wenn Du einen technischen Benefit von hast. HTML/CSS und Co ist einfach Welten weiter verbreitet... auch wenn native Lösungen natürlich noch einen immens hohen Bestand haben.
Das, was Du womöglich suchst, nennt sich Responsive UI. Also Elemente, die sich anhand von Regeln automatisch anhand vom Inhalt anpassen.
Das wird in allen modernen UI-Technologien über die deklarative Schreibweise umgesetzt; in deinem Fall über XAML.
XAML bietet Dir verschiedene UI Container, die Du miteinander und ineinander kombinieren kannst.
Das führt dazu, dass Dein Button automatisch je nach Menge des Inhalts (in Deinem Fall das Grid) responsive angepasst wird - und eben nicht über eigenes Code Behind Zeugs.
Ja, das bedeutet, dass mal bisschen das UI Prinzip von XAML lernen und ausprobieren muss.
Zitat von joerg55
Sie blockiert sogar ganz explizit.
Das ist Deine umgesetzte Logik, die dafür sorgt, dass Deine "Applikation" blockiert.
Das ist aber nicht das technische Blockieren der UI.
Labels warten nicht und haben auch keinen Einfluss auf den Validierungsflow. Das ist nicht angedacht.
In der UI "warten" ist eh keine gute Idee, weil das implizit bedeuten würde, dass Deine UI blockiert.
WinForms ist über 20 Jahre alt und unfassbar weit verbreitet - die Wahrscheinlichkeit, dass Du einen Bug gefunden hast, sehr gering.
Zeig mal Deinen relevanten Code, dann muss niemand raten.
Zitat von pollito
bin ich seit 2018 Datenschutzbeauftragter.
Es wäre schön, wenn man das an Deinen Beiträgen herauslesen könnte und so auch ein Mehrwert für potentielle Leser entstehen würde.
Ansonsten Danke ich für den Rest Deines Beitrags, der die restlichen Antworten nochmals inhaltlich unterstreicht 😃
Die Lösung ist auch von einem IT sachkundigen Datenschutzbeauftragten abgenommen
Das allein sagt gar nichts aus.
Dein SSH sorgt nur für eine sichere(re) Verbindung - nicht mehr, nicht weniger. Dann wurde halt die Verbindung abgenommen, und?
Das hat noch lang nichts mit dem Verwalten der Daten selbst zutun. Vielleicht war das bei Dir schon okay - das geht hier nicht heraus.
Aber nochmal: darum gehts auch hier in dem Thread nicht.
Dein "Vorschlag" oder nun "Erwähnung" genannt hilft 0,0 und hat mit der Fragestellung exakt nichts zutun.
und damit für mich der Käs' gegessen.
puh...
Und das gibt der Gesetzgeber vor?
Bin etwas erstaunt, dass Du das in Deiner Position nicht weißt....
Der Gesetzgeber hat im Sinne von GDPR bestimmt, dass das Rechtsprinzip umgekehrt ist. Das heisst, das Gesetz regelt nicht, was Du nicht darfst, sondern das Gesetz regelt, was Du darfst und musst.
Daher ist die Frage "Sage mir, wer verbietet mir eine SSH-Lösung?" auch nicht abgedeckt und beantwortet Dir niemand. Du solltest Dich eher fragen: "Wie hilft mir SSH, dass ich gesetzkonform agiere?"
Das hat der Gesetzgeber so umgesetzt, dass Gesetzeslücken zB durch technologische Weiterentwicklung nicht entstehen. Aber auch so Betreiber dazu zwingt, dass alte Software angepasst, oder sogar in vielen Fällen ersetzt werden müssen, wenn diese nicht nach den Spielregeln spielen, zB weil sie schon 30 Jahre alt sind.
Der Gesetzgeber schreibt vor, wie Du mit GDPR-relevante Daten umgehen musst; teilweise explizit und teilweise implizit.
Handelt es sich um GDPR-Daten musst Du zB dafür sorgen, dass der Zugriff so umgesetzt wird, dass nur die Daten verwendbar sind, die für den eigentlichen Zweck benötigt werden. Das bedeutet implizit, dass Du eine Benutzerzugriffsverwaltung brauchst, sodass nicht jeder Benutzer auf alle Daten Zugriff hat. Man muss also i.d.R. einen Service vor die Datenbank schalten, um Datenabstrahierung und eine eine Autorisierung umsetzen zu können - ansonsten erfüllst Du die Vorgaben nicht; völlig egal ob Du SSH/VPN im Einsatz hast oder nicht.
Dieses Rechtsprinzip hat auf viele Dinge implizite Auswirkungen; auch wenn Du Daten hast, die gar nicht unter GDPR fallen. So helfen die Cloudanbieter, dass gewisse Umsetzungsfehler vermieden werden, weil sie zB per default dass Datenbanken nicht im Internet hängen und Du so potentiell eine Sicherheitslücke hast. Auch ist es technisch nicht bei den Cloudanbietern möglich, direkt per VPN/SSH auf Deine Datenbank zuzugreifen - weil man das sowieso nicht tun soll.
Du kommst also implizit fast gar nicht drum herum einen entsprechenden Service in der Cloud zu betreiben, um a) rechtskonform mit Daten umzugehen und b) damit die Datenhaltung und Verwendung in der Cloud so nutzbar ist, wie sie die Anbieter designed haben.
Die Cloudanbietern helfen also durch die möglichen Verwendungsarten und -vorgaben, dass Du "Dirty Zeug" umsetzt, was Du vielleicht On Prem als "Normal" empfindest - aber halt nich so cool is...
Und darum gehts hier in dem Thread. Dem Ersteller aufzeigen, wieso das in der Cloud so ist und wieso er das in der Cloud so machen muss - und warum sein aktuelles Vorhaben mit der Direktverbindung zur Datenbank nicht so eine gute Idee ist.
Dem Originalposter habe ich nur mögliche Interimslösungen aufgezeigt – mehr aber nicht.
Die ganze Diskussion VPN/SSH ist völlig irrelevant: a) eben völlig wurst für Deine Pflichten zu GDPR und b) funktionier es technisch nicht mal in der Cloud, ohne dass Du zusätzliche (teure) Infrastruktur brauchst. Deine mögliche Interimslösung ist also völlig an der Frage, am Ziel vorbei und hilft ihm 0,0 bei seinem Vorhaben.
Es ist echt schade und Zeitverschwendung, wenn Du bereits vorhandene Antworten nicht liest oder nicht lesen willst.
Gerne kopiere ich es Dir erneut.
Das löst also nicht das Grundproblem des gemeinsamen Zugriffs von individuellen Benutzern auf Daten.
Das Control, siehe Docs, bietet Dir von Haus aus nur einen Click-Event an.
Nur als Hinweis: VSTO ist schon seit über 10 Jahren abgekündigt und alles moderne geht nur noch über die JavaScript Schnittstellen.
Dort hast Du auch mehr UI Möglichkeiten, als es in VSTO jemals gab.
Ein 30 Jahre altes Projekt kann man nicht eben auf der linken Arschbacke von zwei auf drei Schichten bringen. So kann man sich u. U. Luft verschaffen, Kunde bringt Verständnis dafür und bleibt an der Angel und man selbst muss nicht in Schönheit sterben.
Es ist dem Gesetzgeber völlig egal, was Du für ein Projekt hast und wie alt das Projekt ist. Du musst Dich darum kümmern, dass die Regeln eingehalten werden - auch als Entwickler ist das Deine Aufgabe. Ja, das bedeutet manchmal, dass Software neu gebaut werden muss. Aber die Regeln existieren nicht zum Spaß oder um Dich zu ärgern.
Das als "Schönheit" und nicht als Notwendigkeit zu verstehen grenzt an Fahrlässigkeit. Aber leider ein Grund, wieso so viele Firmen immer mehr Probleme mit GDPR Beschwerden und/oder Datenleaks haben.. gut dass die Strafen mittlerweile sehr weh tun.
Und für solche Dinge gibt der Gesetzgeber sogar vergleichsweise viel Zeit, um sich um bestehende Dinge zu kümmern.
Natürlich kannst Du sagen "mir egal" - aber das sagt dann auch sehr viel über die Organisation aus.
Ob Du dem Kunden nun sagst "Hey, mit dem VPN ist das nun viel sicherer" und Dir damit Luft verschaffst, weil Du vielleicht verpennt hast das Frühzeitig anzupassen/Dich darum zu kümmern - das ist dann eine individuelle Sache von Dir. Aber sowas sollte man nicht empfehlen, weil das ganz weit weg von der Realität ist - und dem Gesetzgeber ebenfalls egal ist.
Und nochmal: das funktioniert sowieso nicht ohne zusätzliche Infrastruktur in der Cloud. Also sowieso Käse in diesem Fall.
Zitat von pollito
Wie soll eine sichere und verschlüsselte VPN-Verbindung (z. B. mit durch Passphrasen geschützten SSL/TLS-Zertifikaten) gegen die EU-DSGVO verstoßen?
Keine Ahnung, was Du durchgelesen hast - aber offenbar nicht meine Antwort. Dort steht nirgends, dass der VPN gegen irgendwas verstoßen würde. Da steht, dass er Dir in der Situation absolut gar nichts bringt.
Meine Aussage ist:
Das löst also nicht das Grundproblem des gemeinsamen Zugriffs von individuellen Benutzern auf Daten.
Sofern es sich hier um GDPR-relevante Daten handelt (und davon ist auszugehen, wenn mehrere Benutzer an einem System arbeiten) wäre das eine gesetzliche Verletzung. Kann man klein reden - bleibt eine Verletzung.
Daher nein: in 99,99% der Fälle löst hier ein VPN natürlich gar nichts.
Also egal ob mit oder ohne VPN: Du löst das Grundproblem nicht, bleibt es in 99,99% der Fälle (der Daten-Art) ein GDPR-Problem.
Daher greift man mit Client-Anwendungen niemals direkt auf eine Datenbank zu - auch nicht mit einem VPN.
Ganz davon zu schweigen, dass man bei allen Cloudanbietern nicht direkt mit einem VPN auf eine Datenbank zugreifen kann, sondern dafür zusätzliche Infrastruktur in der Cloud benötigt. Macht also so oder so keinen Sinn.
Eine Entität sollte prinzipiell nur Eigenschaften haben, die die Datenstruktur repräsentieren.
Alle weiteren Dinge solltest Du als Extensions oder als Methoden umsetzen - zumindest wenn es nach Empfehlung geht.
Dadurch ist für jeden Dev auch sichtbar, dass dies nicht zur Datenstruktur gehört.
Das NotMapped gibt es aus Kompatibilitätsgründen; gibt aber die beiden genannten Alternativen sollten bevorzugt werden, wenn möglich.
Ein VPN wäre nichts anderes als ein Verschleiern der Verbindung selbst. Das löst also nicht das Grundproblem des gemeinsamen Zugriffs von individuellen Benutzern auf Daten.
Sofern es sich hier um GDPR-relevante Daten handelt (und davon ist auszugehen, wenn mehrere Benutzer an einem System arbeiten) wäre das eine gesetzliche Verletzung. Kann man klein reden - bleibt eine Verletzung.
Daher nein: in 99,99% der Fälle löst hier ein VPN natürlich gar nichts.
Dein GoodsItem
hat eine Many Navigation zu DangerousGoods
public class GoodsItem : DbModel
{
...
public IEnumerable<DangerousGoods> DangerousGoods { get; internal set; }
}
Aber Dein DangerousGoods
hat keine Navigation zu GoodsItem
. Dir fehlt der FK auf der Seite von DangerousGoods
. Irgendwo muss die Relation ja hinterlegt werden. Gibst Du das nicht explizit an, dann macht EF Core by design implizit in einer Spalte die heisst wie die Entität + Id ⇒ GoodsItemId
.
Das One-To-Many Setup erfordert immer ein FK auf der One-Seite.
Deine FK Konfiguration ist also falsch (bzw. hast Du sie einfach vergessen), die Fehlermeldung absolut korrekt.
PS: gibt nen Grund wieso man in EFCore ICollection verwenden sollte und nicht IEnumerable.
Relationship navigations
Zeig mal die Entität DangerousGoods sowie dessen Config.
So wie ich das sehe existiert hier eine Relation; aber Du hast die FK Spalte vergessen/falsch konfiguriert.
@Abt: Nein, es gibt keinen Zeitzonen-Bug. Hier läuft alles nach MEZ, und auch die Server stehen in Deutschland. Datenbank und frühere Software stammen allerdings auch nicht von mir. Ich hätte alles per UTC + Zeitzone gemacht.
Das ist .NET und dem Verhalten, wie der Provider mit DateTimeKind umgeht egal. Das ist eine by-design Einschränkung des DateTime-Datentyps, dem Du nicht entkommen kannst, egal was Du tust und das erst mit DateTimeOffset behoben ist. Das kann man nur mit Workarounds beheben.
Siehe Sample im referenzierten Thema.
Mit "lokal" war hier als Vergleich das lokale (Firmen)Netz gemeint; habs oben präzisiert.
"Lokal" einem Rechner kann eine Anwendung durchaus direkt mit der Datenbank sprechen.
Das ist in kleineren Szenarien, wo Skalierung keine Rolle spielt, auch ein gängiger Weg (auch wenn aus Sicherheitssicht zwei getrennte Maschinen immer noch der bessere Weg ist).
Ich gehe mal davon aus das Google einen entsprechenden HTTP API Service bereistellt über den ich mit der Datenbank sprechen kann oder?
Natürlich nicht. Das musst Du selbst entwickeln. Überall. Das ist schließlich ein Logikbaustein Deiner Anwendung.
In .NET entwickelt man sowas i.d.R. mit ASP.NET Core als Backendtechnologie.
Cloud-Anbieter bieten Dir aber Services an diesen HTTP Service dann zu betreiben; auf Google zB die App Engine oder Compute Engine.
Datenschutzgrundregel: Datenbanken hängen nie direkt im Internet. Deine WPF Anwendung darf also nicht direkt mit der Datenbank kommunizieren. Auch lokal (innerhalb einer Firma) ist das prinzipiell alles andere als eine gute Idee oder gar Empfehlung.
Alle großen Cloud-Anbieter verbieten auch per default die Datenbank direkt über das Internet verfügbar zu machen; das muss explizit inkl Warnung erfolgen.
Deine Client-Anwendung sollte also mit einem HTTP API Service sprechen, und nicht mit der Datenbank direkt.
Die Verbindung von Service zu DB findet dann geschützt statt; auch die Verbindung von WPF zu Service muss geschützt und authentifiziert stattfinden (sogar eine gesetzliche Vorgabe).
Du sprichst in Deinen Anforderungen nur von "Cloud Datenbank" - das kann theoretisch alles und nichts sein.
Siehe [Hinweis] Wie poste ich richtig? Punkt 5.
Mit "funktioniert nicht" kann niemand was anfangen.
Reine Vermutung: es wird nichts angezeigt.
Ursache: Du bindest Daten nicht ordentlich, weil die Liste in Deinem Modell erzeugt wird statt MVVM zu verwenden (wo die Liste als Bindung erzeugt wird und die Liste nur befüllt wird, damit die Referenz zur Bindung nicht verloren geht.
MVVM ist die Basis von Xamarin.Forms und muss korrekt verwendet werden.
The Model-View-ViewModel Pattern
Du hast ja sehr offenbar Entitäten, die GoodsItem heissen - also wird da irgendwo die Quelle sein.
Generell: Software erfindet nichts. Irgendwo in Deinem Schema oder im Kontext wird die Spalte vorhanden sein.
Das kann auch ein Folgefehler sein, zB weil irgendwas in Deiner Entity Config falsch ist; also Dein Schema etwas enthält / nicht enthält, was dann automatisch gewisse Spalten erzeugt. Vielleicht hast Du eine Relation und vergessen einen FK zu definieren ⇒ er wird automatisch erzeugt und der Name passt nicht / Du hast das Schema vergessen.
Das passiert oft, wenn man mit EF nicht so umgeht, wie es empfohlen ist (und wenn man den Code sieht, dann befolgst Du gewisse Ratschläge auf alle Fälle nicht, das sieht man schon am Snippet).
Meine Vermutung aufgrund von Erfahrung eben: Deine Entity GoodsItem oder ein FK ist fehlkonfiguriert.
PS: was direkt auffällt: Du hast ein Zeitzonenbug in Deiner Software.
[FAQ] DateTime vs. DateTimeOffset und der Umgang mit Zeiten in .NET
Solche API Clients wie Soap, Refit und wie sie nicht alle heißen sollten immer gewrappt werden; a) um die ganze Sache testbar zu machen und b) um eben solche generellen Dinge wie Response-Abstraktionen umsetzen zu können. Die üblichen Bezeichner für sowas sind dann "Provider".
Niemals solche generierten Services (eigentlich sinds Client, keine Services) direkt in der Logik (oder hier UI) nutzen.
Absolute Grundregel.
Les Dir vor dem Versuch solche Pakete vollständig durch, damit Du keine Zeit verschwendest...
License
This is a commercial product and requires a paid license for possession or use. Syncfusion’s licensed software, including this component, is subject to the terms and conditions of Syncfusion's EULA. You can purchase a license here or start a free 30-day trial here.
Frameworks bieten Dir Grundbausteine und Funktionen, dass Du das selbst umsetzen kannst. Sowas bietet Dir kein Framework von Haus aus.
Willst Du eine fertige Komponente haben, dann wirst Du diese sehr wahrscheinlich kaufen müssen; gibt viele Anbieter, die fertige Komponenten als Produkt vertreiben. Ob es alternativ freie Projekte dazu gibt: auf Google oder GitHub suchen 😉 Recherchieren ist Deine Aufgabe.
Ansonsten musst Du je nach Technologie - Du hast im Grafikbereich gepostet, daher ist nicht klar, mit welcher UI Technologie Du arbeitest - das selbst umsetzen / zeichnen.
Die Variable ist nicht dazu gedacht, dass damit Deine Anwendung produktiv läuft.
Deine Fehlermeldungen werden in Zukunft sensible Daten wie zB. den ConnectioNString zur Datenbank oder Config-Settings anzeigen, wenn Du welche hast.
Beitreibe also niemals eine Anwendung im Development-Modus nach Außen. Das ist eine reine Hilfe für Entwickler.
Das fällt übrigens sogar Fahrlässigkeit, wenn damit Schaden entwickelt wird.
Wenn es wirklich an der Variable liegt, was ich mir nur schwer vorstellen kann, aber durchaus sein kann, wenn Du an der Program.cs falsch gebastelt hast, liegt zu 100% ein Programmierfehler vor.
Zitat von TomSchmitz
Glücklicherweise gibt es aber auch die Library: iTextSharp.text.pdf
Bedenke, dass die Software zwar Open Source ist, aber nicht kostenlos sondern in den aller meisten Lizenzpflichtig.
Buying a license is mandatory as soon as you develop commercial activities distributing the iText software inside your product or deploying it on a network without disclosing the source code of your own applications under the AGPL license. These activities include:
- offering paid services to customers as an ASP
- serving PDFs on the fly in the cloud or in a web application
- shipping iText with a closed source product
Daneben verwendet iTextSharp die problematische AGPL Lizenz.
Und hinzu kommt: iTextSharp ist schon ewig EOL.
Der Nachfolger ist IText7 (mit ebenfalls AGPL und ebenfalls "nicht-gratis Mentalität").
Zitat von kevin2510
Ich möchte ein Programm mit c# forms erstellen das mehrere Programme und regeinträge löscht
Was ist denn User Case, was hast Du vor?
Weil das widerspricht den Windows- (und wie Thommy gesagt hat auch den Benutzerempfehlungen), dass ein Programm andere Dinge löscht.
Üblich wäre es eher, dass Du den Uninstaller von anderen Programmen ermittelst und antriggerst; denn nur der weiß, wie man eine Anwendung löscht.
Da steht doch
Swapping to the Development environment displays detailed information about the error that occurred.
The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.
Dann mach das doch. Setz die Env ASPNETCORE_ENVIRONMENT
auf Development
Wenn Du das ASP.NET Template richtig hast, dann sieht es so aus:
// development web pages
if (_webHostEnvironment.IsDevelopment())
{
app.UseDeveloperExceptionPage(); <<<<<<<<<<<<<<<< das wichtig
}
UseDeveloperExceptionPage
ist nur im Dev Environment, durch die ENV, aktiv und nur dann sind Fehlermeldungen, die sensible Daten enthalten können, sichtbar.
Das hat nix mit dem Debug Modus zutun. Das sind fundamentale Dinge, wie ASP.NET Core weiß, ob Du gerade auf einem Produktivsystem bist, bei dem absolut nix an Errors geleaked werden darf, oder nicht.
Use multiple environments in ASP.NET Core
Wie Du selbst im Hinweistext lesen kannst, wird die Fehlermeldung aus Sicherheitsgründen unterdrückt. Damit allein kann ja niemand was anfangen.
Mach doch mal das, was dort steht.. hast offenbar nich richtig gelesen.
Auf C# schieben - das hier nichmal ne Rolle spielt, weils nur die Sprache is - ist in 100% der Zeit der falsche Ansatz.
Zitat von Waconda
-> Extras - Optionen - nur das aktuelle Projekt kompilieren
Das ist eigentlich sogar kontraproduktiv, weil Du damit andere Projekte nicht mehr baust und veraltete Assemblies hast.
Das hat auch nichts mit dem Laden zutun.
Ich habe nun eine Frage an die Experten. Die Seite möchte ich noch weiter entwickeln mit der Zeit.
Wie gehe ich dies nun am besten an?
Da Du von "am besten" sprichst: einen ordentlichen Entwicklungsflow einrichten, was die Basics wären:
-> Solution als Git-Repository in einer Quellcodeverwaltung hinterlegen (zB GitHub)
-> DevOps umsetzen (zB mit GitHub Actions)
-> In Zukunft alle Änderungen mit Pull Requests umsetzen (zB via GitHub Flow oder GitLab Flow)
Ansonsten eine Frage so stellen, dass man sie auch beantworten kann.
Diese ganzen doppelten und dreifachen Null-Checks kann man einfach mit einem if ausmerzen.
Syntax Sugar sollte schon überlegt angewendet werden. Wendet man Syntax Sugar hingegen inflationär an, ist das nicht nur für den Clean Code scheisse, sondern auch in den aller meisten Fällen ziemlich kontraproduktiv für die Performance.
Regex ist dafür da, Inhalt zu Extrahieren. Es gibt zwar neben Regex.Match auch Regex.Replace; aber die eigentliche Aufgabe von Regex ist erstmal das Extrahieren.
Im zweiten Schritt holt man sich aus dem Match die passenden Regex-Groups bzw. Werte heraus, und kann dann die Text-Elemente ändern.
Siehe Beispiele in Regex.Match in den Docs.
PS: auf die Groups greift man einfacher zu, wenn man diesen Namen gibt.
Ist auch in dem Link als Beispiel enthalten.
Die Parse-Methoden gehen nicht von multiplen Werten aus, also nicht von einem Format.
Dafür kannst Du Regex verwenden, was mittlerweile auch sehr effizient geht.
Das ist a) ziemlich viel Code für wenig Funktion und außerdem irgendwie blöd das ich den String in INT konvertieren muss...
Deine Variante ist aus Performance-sicht sehr effizient - aber ja mit Aufwand.
Eine Typkonvertierung ist immer Pflicht in einer Runtime, die streng typisiert ist (wie eben .NET, Java....)
PS: es gibt kein Grund das Thema erneut zu posten.
Zitat von steeveKa1
Warum ist aber myEnumerator nun ein Objekt vom Interface IEnumerator?
Ist er nicht. Es ist ein Interface. Das siehst Du auch, wenn Du das Interface verwendest statt var.
var ist bequem, aber leider verschleiert das viel. Wenn Du Dir also nicht sicher bist: verzichte auf var.
Du kannst einfach in den Quellcode schauen, was für einen Typ zu bekommst.
Im Falle von Array kann das unterschiedlich sein
// https://github.com/microsoft/referencesource/blob/51cf7850defa8a17d815b4700b67116e3fa283c2/mscorlib/system/array.cs#L1264C7-L1264C7
public IEnumerator GetEnumerator()
{
int lowerBound = GetLowerBound(0);
if (Rank == 1 && lowerBound == 0)
return new SZArrayEnumerator(this);
else
return new ArrayEnumerator(this, lowerBound, Length);
}
Edit: Formulerungskorrektur.
Du erstellst Zeug, Commands wie Collections im CodeBehind.
Das ist genau das, was man bei MVVM nicht tun sollte.
Und nein - eigentlich ist das super simpel; wenn man die Ideen von MVVM umsetzt.
Das Problem ist: MVVM ist ein konzeptioneller Pattern, das heisst mit Try-Error / ausprobieren kommst leider nicht weit.
Daher gilt MVVM auch als ein Pattern, der eine Lernhürde hat, weil Du wirklich so eine Doc und die Regeln von MVVM beachten und anwenden musst.
Musst selbst implementieren oder OpenId SDKs verwenden, die sich an den Standard halten.
Den PublicClientBuilder von Azure gibts ja nur, weil er auch standard-fremde Dinge in Azure umsetzen kann.
Zitat von perlfred
... denn das wird ja auch konsequent durchgezogen (jede öffentliche Eigenschaft oder Type muss dann eine Beschreibung haben) aber es funktioniert! (Das ich diese auch unterdrücken könnte ist mir schon bewusst.)
Vorweg: konsequent ist nicht immer sinnvoll.
Das Gute ist: durch Copilot (vor allem das derzeitige Copilot X) lassen sich solche Docs sehr gut generieren, auch qualitativ in Ordnung.
Man muss sowas nicht zur ABM kommen lassen.
Zitat von sv00010kas
Ich würde auch die asychrone Funktion verwenden, wenn es ich wüsste, wann der Quelltext vollständig geladen ist.
Zeigt mir, dass Du Dir nichmal 2 Minuten Zeit genommen und den Link, den ich Dir nicht aus Spaß gegeben habe, angeschaut hast.
HttpClient Class
Denn man muss nicht mal zum ersten Beispiel scrollen, wo es erklärt ist.
Bitte nicht die Hilfsbereitschaft des Forums ausnutzen, weil Du keine Zeit oder Lust hast.
Danke.
Das Forum hilft Dir gern bei konkreten Problemen. Wir sind jedoch nicht Dein kostenloser Code-Generator, weil Du keine Zeit dafür hast.
Denke, dass Du dafür Verständnis hast.
Und wieso probierst dann irgendwas (planlos?) aus statt 2-3 Minuten die Docs zu lesen, das erste Beispiel anzuschauen und es so zu machen, wie es funktioniert?
Verschwendest ja selbst Zeit.