Visual Studio 2022

Letzte Woche hatte ich eine Schulung zu C# gehalten und gestern wieder eine Anfrage für die kommenden Monate bekommen, die explizit das neue Visual Studio 2022 nutzen wird (Überarbeitung von Schulungsunterlagen). Auch wenn mein Standardkunde für die regelmäßigen C#-Schulungen noch auf Visual Studio 2019 setzt (der unternehmensweite Umstieg auf die Version 2019 wurde sogar erst Ende 2021 abgeschlossen), habe ich den neuen Auftrag zum Anlass genommen, die neue Version zu installieren und mal anzusehen.

Auf den ersten Blick ist fast alles gleich geblieben, aber mehr werde ich bei der Überarbeitung meiner Schulungsunterlagen rausfinden. Vorher kommen aber noch ein paar Schulungen, bei denen auch wieder eine der C#-Schulungen dabei ist, die mit Visual Studio 2019 gehalten werden müssen.

Großes Reinemachen der Datenträger

Diese Woche habe ich eine Remote-Schulung zu C# gehalten. Am Ende so einer Schulung gebe ich immer die von mir erstellten Quelltexte an meine Schulungsteilnehmer weiter. Da ich im Fall von so einer C#-Schulung natürlich mit Visual Studio arbeite, sind in meinen Projekten aber immer die ganzen *.dll, *.exe, *.obj und andere Dateien abgelegt, die beim Compilieren und Ausführen der Schulungsprojekte entstehen. Solche kompilierten Sachen sind für die Weitergabe an meine Teilnehmer natürlich unnötig und sogar kontraproduktiv, weil damit die weiterzugebenden Daten ziemlich umfangreich werden und – beim Verschicken über das Internet – die Firewall der Firmen, wo meine Teilnehmer arbeiten, diese Dateien meist grundsätzlich blockiert. Also stelle ich fast immer eine ZIP-Datei zusammen, die nur die eigentlichen Quelltexte und meist auch die Projekt- und IDE-Einstellungen enthält, wenn das – wie im Fall von Visual Studio – relevante Informationen sind.

Nun bin ich insbesondere bei meinem MateBook mit seiner extrem sparsamen 256 GByte-SSD schon seit Monaten am Limit und habe sogar diverse Verzeichnisse und Programme schon gelöscht oder auf eine externe SSD verschoben, die ich eigentlich gerne dabei bzw. auf der internen SSD des Notebooks gespeichert hätte.

Ich habe keine Ahnung, warum mir nie aufgefallen ist, dass ich vollkommen unnötig bei meinen ganzen Quelltexten der Bücher, Videotraining bei LinkedIn Learning, Schulungen und Kursen oft ebenfalls die ganzen *.dll, *.exe, *.obj und andere binäre Dateien sowie auch PlugIns und ähnliche Projektergänzungen und sogar alte Software, die ich in den Maßnahmen gebraucht hatte, mit gespeichert habe. Oder aufgefallen war mir das wohl schon – ich habe mich einfach nicht drum gekümmert.

Denn sinnvoll ist es schon, zu jeder Maßnahme (gleich ob Schulung, Buch, Videotraining, Kurs oder Projekt) die wirklich relevanten Dinge zu behalten. Ich speichere deshalb nach jeder Maßnahme auch die Projektdateien hinsichtlich der Programmierung. Die Einsendeaufgaben, die ich etwa bei der ILS erhalte, behalte ich ebenso auf Dauer. Und ich lege davon dann im Rahmen meiner üblichen Datensicherung auch zig Kopien an. Aber da ich vor dem Speichern als auch den Datensicherungen auf meinen vielen redundanten Medien in Bodenheim, Eppstein, der Cloud und im Banksafe eben fast nie aufgeräumt hatte, sind auf den Datenträgern mittlerweile so viele GByte an unnützem und zudem mehrfach redundantem Zeug entstanden, dass einfach mal ein großes Reinemachen notwendig war.

Diese unglaublich vielen Dateien machen ja auch eine Datensicherung wahnsinnig zeitintensiv, da das ganze überflüssige Zeug eine Synchronisation zeitlich förmlich explodieren lässt. Das habe ich gerade wieder bemerkt als ich meine externe Festplatte, die ich in Eppstein deponiert habe und so etwa einmal im Monat synchronisiere, auf Stand bringen wollte. Mein Datensicherungsprogramm SyncToy ist nur mit Fehlern durchgelaufen und die folgende direkte Kopieraktion von meinem NAS auf die Festplatte hat etwa 18 Stunden gebraucht.

Das hat mir gelangt und ich beseitige gerade über alle Datenträger hinweg die unnötigen binären Dateien. Im Wesentlichen befinden die sich bei Visual Studio-Projekten in den Verzeichnissen Debug und Release und bei Eclipse  & Co ist das .metadata-Verzeichnis oft auch riesig und kann jederzeit bei Bedarf reproduziert werden.

Also weg mit dem Zeug und noch den Installationsdateien einiger alter Software und ähnlichen Dingen. Ich denke, dass ich so pro Rechner bzw. Datensicherungsmedium vielleicht 10 – 40 GByte Platz gewinne. Kann auch deutlich mehr sein, aber die vielleicht 200 – 400 GByte, die ich damit over-all frei mache, sind gar nicht der Punkt.

Die Sache wird übersichtlicher und eben bei der Synchronisation während Datensicherungen deutlich schneller und auch stabiler. Der Upload auf Cloud-Datenspeicher geht natürlich ebenso viel schneller (gerade der) und eine komprimierte Datensicherung (auch Anlegen und Entpacken eines Archivs geht natürlich viel fixer) sollte vielleicht sogar wieder auf einen USB-Stick für den Banksafe passen.

Nur jetzt muss erstmal der bereinigte Stand synchronisiert werden und da greift nochmal das zeitlich aufwändige Problem, dass so viel Zeug an den verschiedensten Stellen auf  NAS & Co gelöscht werden muss. Aber wenn die große Putzaktion durch ist, sollte ich auf Dauer viel Zeit gewinnen.

 

Variablen tauschen – Tutorial zu Python

Schon seltsamer Zufall. Ich halte gerade eine Remote-Schulung zu C# und habe eben als Abschluss-Übung ein Beispiel durchgespielt, in dem die Teilnehmer mit einer Methode den Inhalt von zwei Variablen vertauschen sollen. Eben schaue ich, was der heute veröffentlichte Entwickler-Tipp zu Python für ein Thema hat. Tja – Variablen tauschen mit Python. Ich wusste es wirklich nicht, denn die Reihenfolge der Tipps und deren Veröffentlichung wird bei LinkedIn Learning entschieden. Bei Python geht so ein Vertauschen allerdings extrem elegant und kompakt. Weit weniger aufwändig als etwa in C#.

Das Billig-Chuwi als Skype-Remote-Server für Visual Studio

Mein Microsoft-Surface-Billig-Klon von CHUWI fristet ein eher gemütliches Dasein in meinem Eppsteiner Zweitbüro. Wenn ich mein Matebook nicht dabei habe und mal was am PC da machen will, kommt es gelegentlich zum Einsatz. Genau dafür habe ich das Teilchen ja gekauft – ein möglichst preiswerter Notfall-PC, den ich in Eppstein deponiere und wenn das CHUWI UBook Tablet mal so zum Einsatz kam, hat es sich durchaus ausreichend geschlagen. Mehr braucht es bei gelegentlichem Einsatz wirklich nicht.
Nur heute war der große Tag von dem Kerlchen. Ich habe nach 2 Wochen Azubi-Ausbildung in Python und MySQL die Woche für einen anderen Stammkunden eine Schulung in C# übernommen (natürlich wieder remote) und musste heute in Eppstein arbeiten, weil ein Handwerker sich angemeldet hatte.
Nur haben von den 5 Teilnehmern des Kurses 2 kein Visual Studio installiert. Oder zumindest nicht so, dass man C#-Projekte anlegen kann. Der Fehler geht ganz klar auf die Firma, die die Schulung in Auftrag gegeben hat. Wie kann man Teilnehmern eine C#-Schulung buchen und dann kein passendes Visual Studio auf deren Rechner bereitstellen? Da es sich um eine ganz große Firma handelt, geht auch nicht mal schnell eine Installation. Das muss beantragt werden und dann muss das Profil geändert werden usw. usw.
Das ist im Grunde nicht mein Problem, aber ich möchte natürlich, dass meine Teilnehmer zufrieden sind und von der Schulung profitieren. Einer der beiden Teilnehmer hat in der Folge seinen Privatrechner genutzt, aber bei dem anderen ging es nicht. Gestern haben wir uns für die reine Syntax von C# bei ihm mit einer Webseite beholfen, über die man C# im Browser ausführen kann. Zumindest einfache Syntax-Anweisungen. Aber bei echter OOP oder gar GUI-Programmierung langt das definitiv nicht.
Die Schulung verwendet nun Skype (!!) als Remote-Tool. Nicht Teams – nein, Skype. Kundenanforderung. Angeblich wird nächstes Jahr umgestellt, aber im Moment kommt noch das antike Skype zum Einsatz. Wobei es zur Not auch damit geht – das hatte ich bei dem Kunden schon mehrfach nutzen müssen und bin halbwegs zurecht gekommen.
Ja, und damit der Teilnehmer, der gänzlich ohne Visual Studio auskommen musste (bisher – vielleicht ist VS morgen nachinstalliert) , heute praktische Übungen durchführen konnte, habe ich neben meinem Matebook auch das Chuwi in die Sitzung angemeldet, da Visual Studio gestartet und ihm die Remote-Kontrolle via Skype beim Sharen des Programms übergeben. Was soll ich sagen? Ging richtig gut. Sowohl die Leistung von dem Chuwi hat ausgereicht also auch die Performance bei der Übertragung.

C#-Schulung

Die komplette kommende Woche halte ich wieder einmal eine C#-Schulung für einen Stammkunden. Immer noch remote. Das wird wohl noch einige Zeit so weiter gehen. Meine 2 Wochen in Hamburg im Oktober sind – soweit ich das bisher kommuniziert bekommen habe – auch schon wieder auf remote umgestellt. Es sieht so aus als würde ich dieses Jahr komplett online schulen (von der Einzelschulung über 3 Tage im Mai in meinen eigenen Räumen in Eppstein abgesehen).

Update Windows 10 aus der Konsole

Die regelmäßige Aktualisierung von Windows empfinde ich weitgehend als eine Katastrophe. Entweder aktualisiert sich Windows zum unpassenden Zeitpunkt (hatte ich gerade bei einem Kunden, bei dem das erzwungene Update während der Remoteschulung die Teilnehmer ziemlich blockiert hat) oder man deaktiviert das automatische Aktualisieren und dann ist man Out-Of bzw. die Geschichte lässt sich u:u: nicht wieder anschalten oder man sucht sich einen Zeitplan raus, von dem man vermutet, dass die Aktualisierungen nicht irgendwas anderes verhindern. Alles nicht wirklich der Bringer.

Auf meinen drei im Business-Einsatz genutzten Windows-10-Rechnern funktioniert das Windows-Update eigentlich nur auf meiner Workstation ohne großes Eingreifen. Und das auch nicht perfekt.

Auf meinem alten Terra-Notebook kann ich auf wuauserv gar nicht zugreifen. Ich bekomme immer einen Zugriffsfehler, wenn ich den Service starten will. Ich habe schon zig Wege versucht, aber alles ist bisher schief gelaufen (und selbstverständlich habe ich im Administrator-Modus gearbeitet). Auf dem Rechner bin ich mittlerweile mit einem Updates auf einem Stand von Anodazumal :-(. Was mich aber auch nicht extrem beunruhigt, da das Notebook schon mindestens 7 – 8 Jahre auf dem Buckel hat und nur durch ein Schnäppchen einer riesigen Notebook-SSD vor 2 Jahren vom kompletten Ausmustern gerettet wurde. Das Gerät ist wirklich nur noch mein Backup – sowohl als PC als auch Datenbackup vom NAS. Also Backup vom Backup. Dennoch – irgendwie will ich auch da mal ein Update hinbekommen. Ich spiele schon eine ganze Weile in der Powershell und mit net hin und her, aber bisher scheitert alles an den Zugriffsproblemen auf wuauserv.

Noch blöder ist es, dass ich auf meinem aktuellen Huawei-Matebook nur Windows Home mitgeliefert bekommen habe. Eine wirklich armselige Windows-Version (ja – me culpa – ich hätte ja schon auf die Pro-Version umsteigen können, aber bisher hatte ich noch keinen zwingenden Grund gesehen). Da hat man ja so gut wie keine Kontrolle über die Updates. Nicht einmal in den Einstellungen lässt sich der Dialog öffnen (warum auch immer). Ich bin bisher nicht einmal so ganz im Klaren gewesen, ob und welche Updates da installiert waren.

Aber da habe ich jetzt eine sinnvolle Lösung gefunden, um mit NuGet oder in der PowerShell Updates zu dem Zeitpunkt und dem von mir gewünschten Umfang zu erzwingen, wenn ich das will. Da ich die nächsten Wochen ein paar Remote-Schulungen zu C# halten werde, wollte ich vorher sowieso Visual Studio auf den neusten Stand bringen und dabei gleich NuGet ebenso. Und damit kann man dann auch Windows Updates komplett erzwingen. Schön in der Paket Manager-Konsole statt der grafischen, klebrigen Micky-Mouse-Oberfläche der PC Einstellungen. Oder man nutzt eben die PowerShell. Beides natürlich im Administrator-Modus.

Und das geht über die PowerShell so, dass man entweder PSWindowsUpdate oder WindowsUpdateProvider (Install-WUUpdates) verwendet. PSWindowsUpdate soll angeblich gegenüber des von Microsoft bereitgestellten PowerShell-Moduls Install-WUUpdates / Start-WUScan einige Vorteile bringen, aber da bin ich auf Hörensagen angewiesen.
Mit

Get-Command -Module WindowsUpdateProvider

findet man aber erst einmal heraus, welche Windows-Update-Provider auf einem PC verfügbar sind. Damit sieht man dann in etwa so etwas:

PS C:\WINDOWS\system32> Get-Command -Module WindowsUpdateProvider

CommandType Name Version Source
———– —- ——- ——
Function Get-WUAVersion 1.0.0.2 WindowsUpdateProvider
Function Get-WUIsPendingReboot 1.0.0.2 WindowsUpdateProvider
Function Get-WULastInstallationDate 1.0.0.2 WindowsUpdateProvider
Function Get-WULastScanSuccessDate 1.0.0.2 WindowsUpdateProvider
Function Install-WUUpdates 1.0.0.2 WindowsUpdateProvider
Function Start-WUScan 1.0.0.2 WindowsUpdateProvider

Sobald ein ausreichend neuer Build vorhanden ist, kann man dann Updates suchen und installieren (Updates für Windows und andere Microsoft-Produkte):

$Updates = Start-WUScan -SearchCriteria „IsInstalled=0 AND IsHidden=0 AND IsAssigned=1“
Write-Host „Updates gefunden: “ $Updates.Count
Install-WUUpdates -Updates $Updates

Ein anderer Weg führt eben über das PSWindowsUpdate-Modul, das so aus der PowerShell installiert werden kann (oder man nutzt einfach Visual Studio und da dann die Paket-Manger Konsole):

Install-Module -Name PSWindowsUpdate -Force

Danach kann man nach der Version schauen:

Get-Package -Name PSWindowsUpdate

 

Aber das passende NuGet-Version muss dabei vorhanden sein, wobei die auch bei Bedarf nachinstalliert wird. Die Ausgabe wird so etwas sein:

Name Version Source ProviderName
—- ——- —— ————
PSWindowsUpdate 2.2.0.2 https://www.powershellgallery… PowerShellGet

 

Für den nächsten Schritt sollten die Ausführungsrichtlinien für den aktuellen Prozess auf uneingeschränkt gesetzt werden:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

Und dann holt man die verfügbaren Updates so:

Get-WindowsUpdate -MicrosoftUpdate -Verbose

Die Installation von allem ohne weitere Rückfrage geht dann so:

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

Soweit habe ich die Sache mit meinem Matebook auch schon erfolgreich durchgespielt und jetzt werde ich mir das Terra-Notebook und auch die Workstation vornehmen und mal sehen, was ich da aktualisieren kann oder auch nicht.

Wenn das alles nicht hilft, werde ich nochmal den folgenden Tipp in der Admin-Konsole versuchen:

net stop wuauserv

net stop bits

cd %systemroot%

ren SoftwareDistribution SoftwareDistribution.bak

net start bits

net start wuauserv

Ich habe zwar wenig Hoffnung, dass die Geschichte insbesondere bei den Zugriffsproblemen auf wuauserv was hilft, aber vielleicht nutzt die Schrittfolge ja jemand anderem oder in einer anderen Konstellation beim Update.

Das Ende von Visual Basic

Es ist vielleicht etwas drastisch formuliert, aber VB hat fertig. Schon seit Jahren hat Microsoft immer wieder angekündigt, bei .NET nur noch auf C# und C/C++ zu setzen. Jetzt ist es amtlich, dass die letzten Neuerungen für VB mit .NET 5 kommen. Dann wird der Versionsstand eingefroren.

Was aber nicht heisst, dass man in absehbarer Zeit VB-Programme los ist bzw. nicht mehr mit VB programmieren wird. Das Beispiel Cobol zeigt es! Seit 30 Jahren totgesagt und – zumindest bei Banken und Versicherungen – immer noch stark im Betrieb.

Ein bisschen unter den Tisch fällt die Zukunft von F#. Denn auch hier hat Microsoft das Interesse verloren, wobei man zugeben muss (auch wenn ich dazu ein Videotraining veröffentlicht habe), dass diese Sprache von Anfang an ein Nischendasein geführt hat.