none
Syntaxändereung oder Bug in Visual Basic? RRS feed

  • Frage

  • Hallo,

    der nachstehende Code ist in einer Windows-Form-Anwendung (Visual Basic, Desktop) x-mal unter Visual Studio 2019 in verschiedensten Varianten compiliert und funktioniert perfekt (beschriften eines Buttons mit einer Sprachversion, in dem Fall de). (Es wird zur Speicherung keine Datenbankanwendung sondern ein eigenes programmgesteuertes Speicherverfahren mit eigener Dateistruktur und wahlfreiem Zugriff - Randomdateien verwendet)

    Unter Visual Studio 2022 Pre gibt es plötzlich eine Fehlermeldung, "Computer" sei kein Member der Anwendung. Eine Beschreibung oder einen neuen Code dazu finde ich nicht.

    Weiß jemand dazu etwas? Ist das ein Bug oder gibt es eine noch nicht beschriebene Syntaxänderung? Hier der Problemcode, soweit er einschlägig ist:

    Imports System.Security.Cryptography
    Imports System.IO
    Imports System.forms
    Imports System.Net
    Imports System.IO.Compression
    Imports System.IO.Compression.FileSystem
    Imports System.Threading
    . (Code)

    Public Class Form1
    . (Code)
        Public Shared txy As String = "P:\__Programmierung\Projektdateien\StaatDATA\Documents\language\"
        Public Shared langu As String = "de\de"
    . (Code)

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '***** Loader der Anwendung
            . (Code)
            Form1.txy = Form1.txy & Form1.langu
            . (Code)
            Button1.Text = My.Computer.FileSystem.ReadAllText(Form1.txy & "_100001.li2")
            . (Code)
        End Sub

        . (Code)
    End Class

    Danke und schöne Grüße
    Spockspockspock


    Fortschritt ist nicht, das Alte abzuschaffen, sondern das schlechte Alte durch etwas besseres zu ersetzen, das gute Alte aber zu erhalten, bis es etwas wirklich besseres gibt.

    Freitag, 1. Oktober 2021 11:11

Alle Antworten

  • Welchen Projekttyp hastdu gewählt?
    Net Core läuft ja quasi Hardwareneutral und da gibts das dann nicht.
    Bei Net Framework bist du dann wieder richtig.

    Aber warum noch My.Computer.Filesystem?
    In System.IO hast du nahezu dieselben Funktionen.

    Übrigens:
    Sprachthemen löst man per resourcefiles, die man in Visualstudio direkt pflegen kann.
    Es gibt ein paar nette Nuget-Extensions für eine übersichtlichere Pflege.
    Das funktioniert dann auch wieder in Net Core.

    Freitag, 1. Oktober 2021 13:19
  • Hallo,

    doch ein Bug. Habe sämtliche net framework-Versionen einschließlich der Entwicklerruntime 3.5 installiert, Visual Studio 2022 bietet aber nur net core an und hat das automatisch eingestellt. Danke, das wars. Muß jetzt blos sehen, wie ich Visual Studio dazu bringe, net framework auch anzubieten.

    Warum die Zugriffsart? Es ist eine Simulation, bei der eine große Zahl von Simulatoren, die für Personengruppen stehen, zu unterschiedlicher Zeit unterschiedlich aktuelle und unterschiedlich gute Informationen aus einem Informationspool ziehen, nach ihrem Wissenstand und Fähigkeit handeln und damit die Daten und Realität verändern. Dafür sind die "modernen" Zugriffsarten wenig geeignet, weil von vielen Simulatoren gleichzeitig auf genau nur eine Datenzeile einer Datei von mehreren 100 oder 1000 Datenzeilen zugegriffen und diese verändert wird. Dabei ist die Struktur der Variablen und der Datenzeile durchaus komplex und bis zu 12k groß. Es soll also immer nur gelesen oder geschrieben werden, was gerade gebraucht wird und es muss alles sofort zurückgeschrieben werden, weil der Gesamtbestand viel zu groß ist, um ihn im RAM zu halten. Das geht dann so:

                Form1.satz = Len(Form1.UsRec) '***** Datensatzlänge setzen

                FileOpen(1, "P:\__Programmierung\Projektdateien\IB2S-DecisionDATA\Documents\IB2Sdecision\ad6896880498640722.sdb", Mode:=OpenMode.Random, RecordLength:=Form1.satz '***** Datei öffnen

                Form1.Rn = 1126  '***** Datenzeile 1126 wählen, geschieht schon irgendwo anders, hab es nur zur Verdeutlichung hier eingeschoben.

                Seek(1, Form1.Rn) '***** Datenzeile einstellen

                FilePut(1, Form1.UsRec) '***** Datenzeile 1126 und nur diese eine schreiben (Form1.UsRec enthält die struktuirierten Daten)

                FileClose(1) '***** Datei schließen damit die geänderte Info allen anderen wieder zur Verfügung steht.

    Old school, aber sehr effektiv, jedenfalls dann, wenn das Programm nicht in den Daten suchen muss, sondern weiß, wo es was findet. Deshalb auch alle wesentlichen Variablen Public Shared, um die Datenintegrität programmweit zu sichern. Wenn viele Daten auch noch für etliche mehnschliche User transparent mit für jeden User individuellen Schlüsseln verschlüsselt sind, wohl die einzige Möglichkeit. Naja und bei dem, wo es auch anders geht, bin ich dann halt dabei geblieben.

    Schöne Grüße

    Spockspockspock

      

    


    Fortschritt ist nicht, das Alte abzuschaffen, sondern das schlechte Alte durch etwas besseres zu ersetzen, das gute Alte aber zu erhalten, bis es etwas wirklich besseres gibt.

    Freitag, 1. Oktober 2021 20:02
  • Freitag, 1. Oktober 2021 22:37
  • Hallo,

    danke für den Hinweis. Sehe aber nicht, wie das mein Problem lösen könnte. Es wird im Endeffekt eine Gesellschaft simuliert, die in einem Rechts- Wirtschafts- Gesundheits und Bildungssystem lebt und sich die Gruppen autonom informieren und autonom nach den von ihnen gezogenen Informationen entscheiden. Alle Entscheidungen erfolgen nur aufgrund von Algorithmen und ohne jede Vorgabe. Da hast Du ganz schnell eine hohe 5-stellige Zahl von Simulatoren und Datenmengen im TB-Bereich in einer 6-stelligen Zahl von Dateien (alle aus den Startbedingungen vom Programm erzeugt). Vom einzelnen Simulator wird aber immer nur eine Zeile von 2, 3 oder auch 10kb aus einer der Dateien benötigt, manchmal auch aus mehreren, aber immer nur eine Zeile. Es ist wie in einer Unibibliothek. 30.000 Studenten stöbern in 3 Mio Büchern, lesen aber in jedem Buch immer nur ein paar Seiten und wissen, was sie suchen und wo sie es finden. Mein "Flaschenhals" iiegt also beim Bus und der zu bewegenden Datenmenge.

    Ziel ist: Es wird eine Gesellschaft nach vorgegebenen Rahmenbedingungen im Rechner aufgebaut. Danach kann man politisch eingreifen. Die Simulation ermittelt dann, welcher positive oder negative Erfolg gegenüber einen "weiter so" eintritt. Ein Beispiel: Die wenigsten Kinder ohne Schulabschluß bekommst Du bei einer Klassenstärke von etwa 7. Die meisten Akademiker bei einer Klassenstärke von 42. Grund: Der Zeitaufwand des Lehrers für "schleche" Schüler in kleinen Klassen bremst den Lernerfolg der "guten" Schüler aus, weil er immer wieder im Sumpf der Basics hängen bleibt und zu einem anspruchsvollen Unterreicht gar nicht erst kommt. Hat der Lehrer keine Zeit für den einzelnen Schüler und unterrichtet daher konzentriert und in voller Breite ohne viel Störungen, bleiben zwar die Schwächeren auf der Strecke, aber die Starken erhalten eine wesentlich fundiertere Ausbildung. Genauso erhältst Du mehr Akademiker, wenn es eine "Normalschule" gibt, deren Ziel von Anfang an der Dotorgrad ist und die in einem Zug von der 1. Klasse bis zum Dokorgrad durchläuft und man Schüler aus der Schule nehmen muss, damit sie "nur" einen mittleren Abschluß oder Abitur haben, als in unserem System, in dem der Schüler aus der Hauptschule herausgenomen und auf das Gymnasium geschickt werden muss. Oder: Die Staatseinnahmen steigen bei Steuersenkungen, aber nur, wenn der real bezahlte Steuersatz auf Arbeitseinkommen und Unternehmerlohn über 55% und auf Kapitalerträge über 80% liegen. Ergebnis somit: In der BRD funktioniert das nicht.

    Politikersprech in einer Simulation nachprüfen halt.



    Fortschritt ist nicht, das Alte abzuschaffen, sondern das schlechte Alte durch etwas besseres zu ersetzen, das gute Alte aber zu erhalten, bis es etwas wirklich besseres gibt.

    Sonntag, 3. Oktober 2021 20:09
  • Hallo Spockspockspock,

    Es scheint, dass der Namespace "My" aus einem bestimmten Grund Computer nicht als Mitgliedsklasse enthält. Könnten Sie überprüfen?

    Als Referenz:
    https://docs.microsoft.com/de-DE/dotnet/csharp/fundamentals/types/namespaces

    https://docs.microsoft.com/de-DE/dotnet/core/tutorials/library-with-visual-studio?pivots=dotnet-5-0

    Hoffe das hilft bei deiner Anfrage,
    --Wenn die Antwort hilfreich ist, bitte Upvote und als Antwort akzeptieren--
    Montag, 4. Oktober 2021 10:25
  • Nun ja, wenn ich das so interpretiere, gibt es nun die Basis Net 5/6 und die gibt's nur noch für Core.
    Daher wirst du u.U. Net Framework nicht mehr finden.
    Dies bedeutet ebenso, dass du entweder:
    a) auf System.IO umstellen musst oder
    b) auf Visual Studio 2019 verbleiben musst.

    https://visualstudiomagazine.com/articles/2021/04/20/vs-2020-feedback.aspx

    Siehe nach ".NET Framework"


    Montag, 4. Oktober 2021 12:47