Visual Studio 2017

Visual Studio 2017

Kurz vorweg: Dieser Blog Post ist Teil einer Serie und setzt auf die früheren Teile auf. Lest bitte alle Teile, damit ihr nichts wichtiges verpasst. Zu finden sind alle Beiträge unter dem Tag VS2017.

Cross-Platform Entwicklung

Jetzt mal nur den PC / Laptop Markt im Blick, es gibt ja nicht nur Windows. Apples MacOS wird immer bekannter, woran Microsoft selbst Schuld ist, aber auch Linux wird immer bekannter, nicht zuletzt durch Kleinsysteme wie dem Raspberry Pi. Auf mobile Entwicklung, also Android und iOS, gehe ich hier nicht ein, ich habe keins dieser Geräte. Windows Phone ist der Erwähnung nicht wert, das Ende des Supports steht schon fest. Habt ihr schön gegen die Wand gefahren, Microsoft! Aber heute soll es nicht um die unzähligen Fehlentscheidungen aus Redmond gehen.

Heute arbeiten wir wieder an unserem Projekt aus dem 2. Teil. Nicht gelesen? Blöd. ^^

Vorab

Dieser Teil wird wiederum ein Mehrteiler. Es wird an manchen Stellen etwas komplex, und auch um die Konsole / Eingabeaufforderung werdet ihr leider nicht drum herum kommen. Alles in allem ist das aber nicht schlimm. Ich gliedere es in diese Punkte auf:

  • 3a) Programmierung
    Darum geht es in diesem Teil.
  • 3b) Kompilierung
    Hier wird es um die Kompilierung und um das "Publish" gehen, also das erstellen der fertigen Kompilate (bei Windows den .exe Dateien).
  • 3c) Veröffentlichung
    Das automatische verpacken in die für das System optimalen Formate.

Und ab geht's.

Programmierung

Prinzipiell sind wir schon recht gut vorbereitet. Erinnert ihr euch noch daran dass ich die Projektmappe "BlogExample" und das Projekt "BlogExample_FW" genannt habe? Gleich wisst ihr warum.

Wenn man von vorn herein auf Cross-Platform zielt, wäre es besser mit einer .Net Core Konsolenanwendung zu starten, statt einer regulären .Net Framework Anwendung. .Net Core ist hier und da ziemlich limitiert, was aber kein Problem ist, wenn man es weiß. So würdet ihr auf jeden Fall beim Programmieren sofort sehen, ok, das geht so nicht. Aber, viele Wege führen nach Rom.

Zu den gravierendsten Nachteilen für .Net Core zählen wohl: Keine interne Unterstützung für GUI (Windows Forms oder was auch immer) und - zumindest für mich - kein SerialPort. Aber dazu später. Viel später. Ich hab's nämlich noch nicht hin bekommen…

Unsere Testanwendung betrifft das jetzt aber nicht, ist ja auch nichts spezielles.

Wirklich programmieren brauchen wir hier eigentlich gar nichts, wir können den selben Code also 2x nutzen, für die Framework und die Core Version. Wer jetzt aber an Copy-Paste denkt… Gehen würde es natürlich. Gut wäre es aber nicht. Daher schrauben wir erst etwas am Projekt rum.

Das Projekt bearbeiten

Als Erstes räumen wir etwas auf. Standardmäßig werden mehrere Dateien erstellt, die nicht benötigt werden. 

Klickt im Projektmappen-Explorer erst auf "Alle Dateien anzeigen" und löscht dann diese 3 ausgewählten Dateien (sofern vorhanden). Nur die AssemblyInfo.vb / .cs wird benötigt, und natürlich unsere App.vb / .cs.

Als nächstes schließen wir das Visual Studio kurzzeitig. Geht im Datei Explorer in den Projektordner und erstellt ein neues Verzeichnis, ich nenne es immer gerne "SharedSource". Verschiebt die App.vb aus \BlogExample_FW\App.vb in \SharedSource\App.vb.

Startet Visual Studio erneut, öffnet das Projekt. Natürlich findet er die Datei jetzt nicht mehr.

Diese löschen wir jetzt. Danach klickt mit rechts auf die Projektmappe - "Hinzufügen" - "Neuer Projektmappenordner…". Benennt ihn wie den Ordner den wir erstellt haben, also "SharedSource". Klickt hierauf auch mit rechts, "Hinzufügen", "Vorhandenes Element…". Dort wählt ihr die App.vb aus. Ist streng genommen zwar nicht nötig, aber stark von Vorteil.

Jetzt brauchen wir die App.vb aber wieder in unserem Projekt. Klickt also mit rechts auf das Projekt - Hinzufügen - Vorhandenes Element. Wählt hier die App.vb aus, aber: Klickt nicht gleich auf Hinzufügen oder die Datei selbst, sondern markiert nur die Datei und klickt auf den Pfeil direkt daneben und wählt "Als Link hinzufügen" aus!

Danach sollte es so aussehen:

Hier sieht man an dem kleinen Icon dass die Datei App.vb nicht mehr wie vorher direkt im Projekt drin ist sondern nur verlinkt ist.

Vorbereitet ist jetzt alles, jetzt geht es weiter.

Ein neues Projekt erstellen

Macht also einen Rechtsklick auf die Projektmappe, Hinzufügen, Neues Projekt. Wir erstellen wieder eine Konsolenanwendung, dieses mal aber als .Net Core.

Diese nennen wir BlogExample_Core (statt _FW).

Die erstellte Program.vb brauchen wir nicht, weg damit. Wir fügen wieder unsere App.vb aus \SharedSource hinzu, natürlich wieder als Link, wie grade eben.

Sieht denn so aus:

Der Sinn hinter dem ganzen ist einfach. Wir haben jetzt 2 Projekte, eins für das reguläre .Net Framework, welches schon auf allen gängigen Windows Systemen vorinstalliert ist, und eine für das .Net Core, was leider noch nicht so verbreitet ist, aber dafür Cross-Platform-fähig ist. Jetzt wisst ihr auch warum das mit _FW und _Core. ;)

In den Projekteigenschaften (von beiden) könnt ihr natürlich noch Einstellungen anpassen, wie den Assemblynamen. Hier kann das Anhängsel natürlich entfernt werden. Copyright Informationen und so weiter, aber das ist ja schon seit zig Jahren Standard.

Für uns jetzt nicht benötigt, aber kann man mal im Hinterkopf behalten: Nicht nur SharedSource erstellen, sondern auch SharedResources, sowohl den Ordner als auch den Projektmappenordner. Der wäre denn für Bilder und sonstige angehängte Dateien (Lokalisierungsdaten, Dokumente wie Lizenzen, …).

Sehr nett hierbei (und das hätte ich nie gedacht), wenn ihr beide Projekte drin habt und am Programmieren seid, bekommt ihr per Intellisense gleich angezeigt wenn ein Projekt diesen Code nicht unterstützt:

And the beat goes on

Aber erst in Teil 3b. Behaltet den Tag VS2017 im Auge.


Visual Studio 2017

Visual Studio 2017

Kurz vorweg: Dieser Blog Post ist Teil einer Serie und setzt auf die früheren Teile auf. Lest bitte alle Teile, damit ihr nichts wichtiges verpasst. Zu finden sind alle Beiträge unter dem Tag VS2017.

Git

Heute soll es um Git gehen. Aber vorweg möchte ich noch etwas erwähnen. Es bringt absolut nichts, wenn ihr eure Quelltexte, die Git Repositories etc., an einem unsicheren Speicherort (wie Laufwerk C:) lagert. Sorgt lieber erst mal für Datensicherheit. Wie das geht habe ich bereits hier beschrieben: Darf's noch etwas sicherer sein?

Was ist Git?

Kurz vorweg ein paar Begriffserklärungen.

  • Repository
    Das ist das eigentliche Arbeitsverzeichnis von Git, wenn man so möchte. Hier liegt das Projekt drin, inklusive allen Vorgängerversionen, Branches, … normalerweise ohne Kompilate, also den fertigen Binärdateien (.exe) oder Releases (MeineApp.zip).
  • Pull
    Hiermit "zieht" man sich die aktuelle Version (oder die explizit angegebene) aus dem Repository heraus, ähnlich wie ein Download des Quelltextes von einer Webseite. Wird auch manchmal "Auschecken" genannt, auch wenn das hier nicht so ganz zutrifft.
  • Push
    Wer hätte es gedacht, das Gegenteil von Pull. Hiermit werden die Änderungen die man in seiner lokalen Arbeitskopie gemacht hat übertragen. Wird auch öfters "Einchecken" oder "Commit" genannt.
  • Sync
    Hierbei wird das lokale Repository mit einem Remote Repository abgeglichen, sprich Änderungen die ihr gemacht habt werden hoch geladen, Änderungen die ihr noch nicht habt werden heruntergeladen.
  • Branch
    Eine Verzweigung. Dies kann man sich ungefähr so vorstellen, Debian Linux ist der Master, der Ursprung (origin). Raspbian, Ubuntu, … basieren auf Debian, haben aber eine Andere Zusammenstellung, sind also ein Branch von Debian. Wie man das jetzt genau nutzt bleibt einem natürlich selbst überlassen.

Git ist eine Versionskontrolle. Gehen wir jetzt mal davon aus dass ihr nur alleine entwickelt. Irgendwann fangt ihr mit einem Projekt an, testet es, zumindest in Teilen, und befindet es für ok, also lauffähig. Dann könnt ihr eure Änderungen in Git pushen, wohlgemerkt mit einer Notiz was ihr warum geändert habt. Merkt ihr später dass ihr euch verrannt habt und eure Änderungen so doch nicht umsetzbar sind könnt ihr immer wieder zu Zeitpunkt X zurück kehren, natürlich vorausgesetzt dass ihr vorher auch eingecheckt habt.

Jetzt gibt es ein lokales Git Repository, aber vielleicht auch ein Remote Repository. In meinem Fall wäre das git.tightDev.Net. Das ist zwar optional, aber benötigt, wenn man mit mehreren Leuten gleichzeitig an einem Projekt arbeiten möchte. Es muss nicht unbedingt ein über das Web erreichbarer Server sein, es kann auch auf das Firmennetzwerk limitiert sein.

Es sei aber noch gesagt dass Git ein gewaltiges Thema werden kann, ich kratze hier nur an der Oberfläche und ich weiß auch noch nicht alles.

Vorbereitung

Erstellt jetzt ein leeres Verzeichnis wo eure Projekte drin liegen sollen, z.B. S:\Git falls ihr meinen Rat von oben befolgt habt. Ich gehe davon aus dass ihr Git bereits installiert habt (belasst alles bei den Standardeinstellungen).

Schnellstart

Ab jetzt gibt es 2 Wege. Ein neues Projekt erstellen oder ein existierendes öffnen.

Ein existierendes Projekt öffnen

Könnte man jetzt umständlich über die Konsole machen (git clone), aber man kann auch einfach vom Git Server die Kopie herunterladen. Diese entpackt ihr dann in S:\Git\Projektname. Danach einfach die Projektdatei öffnen.

Ein neues Projekt erstellen

Ich erstelle hier jetzt mit Absicht eine .Net Konsolenanwendung. Das liegt daran weil ich später noch auf Cross-Platform Entwicklung mit .Net Core eingehen möchte (dort ist leider noch keine GUI unterstützt, zumindest nicht von Haus aus). Mit der Konsole selbst kann man aber auch schon einiges machen. ;)

Als Name habe ich jetzt bewusst BlogExample_FW genommen, es ist eine .Net Framework Anwendung. Das _FW habe ich aus dem Projektmappennamen wieder raus genommen. Warum? Dazu kommen wir später, wenn es um Cross-Platform geht. Ich nutze hier VB.Net, aber ihr könnt es genau so auch mit C# machen, falls euch die Sprache eher liegt.

Wichtig ist hier noch unten rechts "Neues Git-Repository erstellen", der muss aktiviert sein.

Interessant wird es jetzt unten rechts:

Links zeigt an wie viele Änderungen noch an ein Remote Repository übertragen werden müssen (wenn man es nutzt). 2 ist hier ganz normal, es handelt sich hierbei um die Dateien .gitattributes und .gitignore (normalerweise versteckt). Diese konfigurieren Git, so dass z. B. bestimmte Dateien nicht synchronisiert werden. Die Attribute lassen wir so wie sie sind, aber die .gitignore sollten wir jetzt mal kurz im Notepad (o. Ä.) öffnen. Hier fügt ihr oben die folgenden Zeilen ein:

*.plb
Thumbs.db
.DS_Store

.plb Dateien werden von Photoline automatisch erstellt, Thumbs.db von Windows. Es handelt sich hier um Miniaturansichten der Grafiken. Braucht kein Mensch, muss nicht synchronisiert werden. .DS_Store erstellt MacOS auf jedem Laufwerk und in jedem Verzeichnis was es in die Finger bekommt. Nutzen bei allen gleich 0, also weg damit.

Zurück in's VS. Der Punkt rechts daneben (im Screenshot 0) zeigt die Änderungen an (veränderte, hinzugefügte und gelöschte Dateien).

Ein weiter öffnet den Team Explorer. Und zu guter Letzt könnt ihr den Branch auswählen oder einen Neuen erstellen. Ganz so tief gehe ich hier aber nicht in's Detail.

Der erste Quelltext

Im Projektmappenexplorer seht ihr jetzt dass eine Module1.vb erstellt wurde. Diese habe ich in App.vb umbenannt (mache ich immer so) und in ihr diesen Quelltext eingefügt:

''' <summary>Module containing all application related stuff.</summary>
Friend Module App

	''' <summary>Application main entry point.</summary>
	Friend Sub Main()

		' Ask for user name
		Console.Write("Enter your name: ")
		Dim sName As String = Console.ReadLine

		' Greet the user
		Console.WriteLine()
		Console.WriteLine("Hello, " & sName & ".")

		' Wait before exit
		Console.WriteLine()
		Console.WriteLine("Press any key to exit...")
		Console.ReadKey(True)

	End Sub

End Module

Der Quelltext ist eigentlich selbsterklärend, absolut nichts spezielles. Beachtet aber, dass ich vorher mit 3fach Kommentaren (''' in VB.Net, /// in C#) über dem Modul und der Sub spezielle Kommentare angelegt habe. Gewöhnt euch das gleich an, das wird später noch wichtig wenn wir zur Dokumentation kommen. Das <summary> und ggf. weitere Felder erstellt Visual Studio dann automatisch selbst.

Jetzt steht unten rechts auch dass wir 3 Änderungen im Projekt vorgenommen haben.

Klickt man hierauf sieht man diese.

"Module1.vb" wurde gelöscht, "App.vb" hinzugefügt. Technisch jetzt zwar nicht ganz so richtig, wir haben sie ja nur umbenannt, aber passt schon. Und natürlich wurde auch die Projektdatei bearbeitet.

Was jetzt zwingend noch gemacht werden muss ist oben im gelben Feld einzugeben was man seit dem letzten Commit bearbeitet hat. Da dies unser erster Commit ist können wir hier "Initial commit." eingeben, sonst natürlich eine Auflistung der Änderungen die wir gemacht haben.

Danach auf "Commit für alle" klicken und das lokale Git Repository wird aktualisiert.

Das erste "Whoops"

Machen wir jetzt nicht, aber nur rein theoretisch. Klickt unten rechts auf master (oder wie euer Branch heißt). Dort könnt ihr euch die Änderungen anzeigen lassen. In dem Verlauffenster seht ihr jede übertragene Änderung (jedes Commit) und könnt entweder die alte Version einer Datei öffnen (Doppelklick auf den Commit, die Dateien erscheinen dann im Team Explorer) oder komplett zum ausgewählten Commit zurück kehren.

Die Cloud

Welcher Vollhorst hat sich den Begriff überhaupt ausgedacht? Naja, Internet ist halt #Neuland… Es soll jetzt um ein Remote Repository gehen. Der kann im Netzwerk stehen aber auch über das Internet erreichbar sein.

Wie auch immer, ihr bekommt eine Git URL, wie https://git.tightdev.net/BlogExample.git. Abgesehen davon habt ihr natürlich eure Anmeldedaten. Jetzt muss das Ganze nur noch verlinkt werden.

Klickt hierzu unten rechts auf den Linken Button mit dem Pfeil hoch, danach auf "Git-Repository veröffentlichen". Dort fügt ihr die URL ein, danach Klick auf "Veröffentlichen".

Ihr werdet dann ggf. noch nach euren Anmeldedaten gefragt. Sollte ein Name für das Repository abgefragt werden benennt es auf jeden Fall "origin". Normalerweise wird das aber standardmäßig gesetzt. Mag sich ändern wenn es verschiedene Branches gibt, aber so weit sind wir noch nicht. ;)

Jetzt wird das Projekt, also das lokale Repository an den Server übertragen. Wenn ihr jetzt Änderungen vornimmt und wie gehabt per Commit diese in euer lokales Repository schreibt wird es nicht gleich auf dem Server synchronisiert. Dazu ist der Punkt Sync da (oder unten rechts der Pfeil nach oben). So werden auch neuere Dateien herunter geladen, falls euer lokales Repository nicht mehr aktuell ist.

Das wars…

… für heute. Im nächstem Teil wird es um Cross-Platform Entwicklung gehen. Seid gespannt. Und immer den VS2017 Tag checken! :)


Visual Studio 2017

Visual Studio 2017…

Ok. Ich programmiere schon seit ich 7 Jahre alt bin. Zugegeben, wirklich programmieren konnte man es damals noch nicht nennen. Zur damaligen Zeit, kann man sich heute kaum mehr vorstellen, gab es noch kein Internet. Wollte man neue Software haben hatte man 3 Möglichkeiten:

  1. Selber programmieren
  2. Disketten oder Datasetten kaufen
  3. Computerzeitschriften kaufen und Listings abtippen

Für mich kam damals natürlich nur letzteres in Frage. Daher meine ersten Erfahrungen mit Basic. Dabei ist es denn auch geblieben. Von einem Schneider CPC464 rüber zum PC mit MS-DOS und QBasic, über Visual Basic 1 zu 6, dann die VB.Net Schiene. Und hier hing ich Ewig auf Visual Studio 2008 / Visual Basic 2008 Express fest. Primär lag das daran weil das neuere Visual Studio 2010 fehlerhaft war und mir den Debugger des installierten 2008'ers, welchen ich weiterhin brauchte, erfolgreich geschrottet hat. Neuinstallation war nötig.

Aber es wird Zeit mit der Zeit zu gehen. Also mal das neue Visual Studio besorgt. Es hat ja auch diverse Vorteile, auf die gehe ich aber in den anderen Teilen dieser Serie ein. Nur so viel sei vorweg gesagt: Es wird auch unter Anderem auch noch um einige neue Eigenheiten der Sprache Visual Basic gehen, um die Veröffentlichung von Anwendungen und auch Cross-Platform Entwicklung ist ein Thema.

Die Tools die ich verlinke sind zwar fast nur für Windows, weil das mein Primärsystem ist, aber einiges gibt es auch für MacOS oder Linux. Vielleicht nicht ganz so komfortabel, einiges muss angepasst werden, aber so ist es halt.

Wie auch immer, diese Serie soll meine Erfahrungen und Lernerfolge wiedergeben, vielleicht hilft es ja auch dem Einen oder Anderen, etwas professioneller zu arbeiten.

Die Community Edition vom Visual Studio ist gratis, wie die Express Editionen früher. Und schon geht es los…

Systemvoraussetzungen

  • Windows 7 oder neuer.
  • 1,8GHz CPU oder besser.
  • Teilweise wird 64 Bit CPU und Betriebssystem vorausgesetzt.

Das sind aber schon extreme Mindestvoraussetzungen. Inoffizielle Mindestvoraussetzungen, also Anmerkungen meinerseits:

  • Kaffee! Weil, das wird dauern.
  • Schnelle Internetverbindung vorausgesetzt (je nach Konfiguration werden ~10-20GB geladen, ggf. sogar mehr).
  • Ohne SSD im Rechner (200GB aufwärts), ersetze Punkt 1 mit "Massig viel Kaffee! Es wird ewig dauern.".
  • 4GB RAM sind absolutes Minimum.

Naja, mein System passt noch, also ab dafür.

Installation

Heutzutage läd man sich ja keine Anwendungen runter, man läd sich Downloader runter die dann die Anwendung runter laden. Diese "schöne" neue Welt übertrifft das Visual Studio noch. Man läd sich einen Downloader runter der das Setup runter läd welches wiederum das Visual Studio runter läd. Aaahja. Naja, hat auch Vorteile, man läd nur Komponenten runter die man ausgewählt hat und die zumindest halbwegs aktuell sind. Den ersten Schritt hätte man sich trotzdem schenken können.

Ist das Setup gestartet dann kann man auswählen was man installieren möchte. Hier kann natürlich jeder das auswählen was er möchte, für mich - und die Folgeteile dieser Serie - sind aber die Punkte

  • .NET-Desktopentwicklung
  • ASP.NET und Webentwicklung
  • Plattformübergreifende .NET Core-Entwicklung

benötigt. Android und iOS lasse ich mangels vorhandenen Geräten links liegen, C++ ist so eine Sache für sich, ich stehe einfach nicht so auf diese Ansammlung von Smiley Gangbang's. Auch wenn ich in dieser Serie wohl nicht großartig auf ASP.NET eingehen werde, empfehle ich es trotzdem, wenn auch nur zum Bearbeiten von .css und anderen Webdateien, weil man in seiner Homepage was anpassen möchte.

Visual Studio Download

Weitere Sachen

Hier greife ich jetzt etwas vor, aber wenn ihr eh schon grad am runter laden seid, zieht das gleich mit. Es handelt sich um extrem hilfreiche Tools auf die ich später auch noch eingehen werde. Hier beschreibe ich nur kurz das Warum, aber nicht das Wie. Bitte erst zu Ende lesen, manchmal ist die Reihenfolge wichtig.

  • Git - Eine Versionskontrolle. Da das Thema sehr komplex ist mehr dazu später. Must-Have! Solltet ihr einen Windows Server haben und wollt euren Quelltext lieber damit synchronisieren statt irgendeinem Onlinedienst wie GitHub, wäre Bonobo Git Server einen Blick wert, den nutze ich selber. Für den lokalen Rechner braucht ihr das aber nicht.
  • Visual Studio Spell Checker - Der Name sagt alles, Rechtschreibprüfung für den Quelltext (wie Variablennamen) und Kommentare. Visual Studio muss erst fertig installiert sein!
  • HTML help workshop - Benötigt von Sandcastle Help File Builder, man selbst nutzt es nicht direkt.
  • Sandcastle Help File Builder - Benötigt um Hilfedateien (.chm, .docx) zu erstellen. Visual Studio muss erst fertig installiert sein! HTML Workshop sollte installiert sein!
  • OfficeToPDF - Konsolenanwendung um Office Dokumente in .pdf umzuwandeln. Setzt ein installiertes Office 2007 (besser 2010) oder neuer voraus.
  • Resource hacker - Sehr nützlich um in Resourcen von Anwendungen (wie Bilder, Icons, …) rein zu schauen und diese sogar zu bearbeiten.
  • ILSpy - Hiermit kann man in den Quelltext von .Net Binärdateien rein schauen. Man bekommt zwar natürlich nicht 1zu1 den Quelltext, aber häufig genug reicht das aus was man sieht. Alternativ wäre noch der .Net Reflector zu nennen, allerdings verachte ich die Firma Red-Gate! Als die Anwendung früher von Lutz Roeder hergestellt wurde war sie noch gratis und lief perfekt, jetzt muss man dafür n Kleinkredit aufnehmen. Get lost! Vielleicht findet ihr ja noch eine alte Version, packt diese mit in eure Sammlung und nicht Updaten!
  • ConfuserEx - Anwendung um Obriges, also das Dekompilieren zu verhindern. Ich erwähne es der Vollständigkeit halber, rate aber von der Nutzung eher ab. Genauer gehe ich darauf in einem späteren Teil ein. Fazit kurz vorweg: Bringt nicht viel Nutzen, aber jede Menge Nachteile, irrelevant welchen Obfuscator man nutzt (es gibt Alternativen, sowohl freie als auch kommerzielle).
  • Visual Studio Image Library - Verschiedene Bilder und Icons die gratis zur Verfügung gestellt werden (Lizenz beachten!). Vorsicht, ist 'ne Menge. Zieht euch die für alle Versionen, es sind Bilder, Bildern ist es egal ob ihr nun Visual Studio 2017 oder 2012 nutzt. Die vom Visual Studio 2005, 2008 und 2010 stehen leider nicht offiziell zum Download zur Verfügung, aus lizenztechnischen Gründen biete ich diese auch nicht an, sorry. Man könnte aber auf die Idee kommen danach zu suchen. VS2005ImageLibrary.zip, VS2008ImageLibrary.zip, VS2010ImageLibrary.zip. Könnte man. Aber ich hab' nix gesagt. Vieles wird in den Versionen eh gedoppelt sein.
  • 7zip, aber auch 7za.exe - Sehr gutes Komprimierungsprogramm. Speziell wird aber die 7za.exe benötigt, welche neuerdings im Extra Archiv ziemlich versteckt ist.
  • mkisofs.exe - Leider finde ich keine Projekthomepage mehr hierzu, daher hoste ich die Datei auf meinem Server. Ggf. passe ich den Link an. Es handelt sich um ein Konsolenanwendung um Images zu erstellen, z. B. CD Images, aber auch andere Typen können erstellt werden. Nette Besonderheit: Es unterstützt das Suchen nach Duplikaten und entfernt diese transparent, genau aus diesem Grund für mich unverzichtbar. Mehr dazu in einem späteren Teil.
  • Photoline (aktuell 59€) oder ein ähnliches vernünftiges Bildbearbeitungsprogramm. Häufig nicht kostenlos. (Klar, es gibt Gimp oder Paint.Net, mit denen konnte ich mich aber nie anfreunden. Persönliche Vorliebe und so. Die andere Alternative, welche bei mir den Titel "Der strudelfressende Nimmersatt des Geldbeutels" zu Recht bekommen hat, ernenne ich hier noch nicht mal namentlich. Ihr wisst welchen ich meine.)

Die meisten Programme werden entweder zu Dokumentationszwecken oder später zur Veröffentlichung verwendet. Wie genau sage ich denn wenn wir so weit sind. 

Solltet ihr Windows ≥8 verwenden dann rate ich an das .Net Framework 3.5 zusätzlich zu dem installierten 4.x zu installieren, sonst können eure Anwendungen nur für die neuen Versionen erstellt werden, was ältere Betriebssysteme ausschließt. Eine Anleitung hierfür bietet Microsoft selbst: https://docs.microsoft.com/de-de/dotnet/framework/install/dotnet-35-windows-10 (Danke, @LotadaC!)

Einrichtung

Ist alles heruntergeladen und (ggf.) installiert kann man das neue Visual Studio mal starten und einrichten. Ich persönlich bevorzuge das dunkle Theme, auch wenn es hier und da noch etwas Feintuning bedarf. Spielt hier erst mal etwas mit rum, was euch gefällt, was nicht. Im nächsten Teil geht's weiter. Was ich zu Erst ändere ist das Einrücken mit Leerzeichen. Es ist einfach nur falsch. War es immer und ist es immer noch. Dazu sind Tabs da! Wer so was will zentriert auch Text in Word mit Leerzeichen und Augenmaß. Es ist einfach nur dumm.

War's das?

Natürlich nicht, nur für heute. Sucht nach dem Tag VS2017, da findet ihr alle Beiträge zu der Serie. Allerdings (während ich diesen Post schreibe) ist die Serie noch im Entstehen, ist ja der erste Teil. Schaut also öfters mal vorbei. Smile

 

p.s.: Für die Ernennung ggf. kommerzieller Software ist deren Qualität und mein Vertrauen darin verantwortlich, keinerlei finanziellen Interessen. Selbst hätte ich Geld hierfür bekommen können, hätte ich das Angebot dankend abgelehnt, wie schon mal geschehen! Dieser Blog ist frei von kommerziellem Sponsoring.


Alles eine Frage der Optimierung

So stand ich vor der Aufgabe eine Datei mit zig Zeichenfolgen zu überarbeiten. Also prinzipiell Duplikate löschen und die Datei sortieren.

Viele Wege führen nach Rom. Die Eingangsdatei hatte knapp 19 Millionen Zeilen - also Zeichenfolgen. Rund 190MB. Man könnte es schon Stress-Test nennen.

Wie setzt man dieses jetzt um? Also erst mal die Datei einlesen. Das geht recht unproblematisch mittels System.IO.File.ReadAllLines. Somit hat man jede Zeichenfolge als ein Element in einem String Array. Aber wie geht es weiter?

1. Versuch

Eine For Each Schleife, jedes Element in eine System.Collections.Generic.List(Of String) kopieren, vorher überprüfen lassen ob es nicht bereits existiert. Ich sage mal so... Ja, es geht. Nach 2 Wochen nonstop Laufzeit war er aber erst bei der Hälfte der Daten angelangt und wurde immer langsamer je weiter es fortgeschritten war. Unbrauchbar.

2. Versuch

Wieder For Each, dieses Mal mit einem Array gleicher Größe als Ziel. Abfrage per Array.IndexOf damit nichts doppelt rein kommt. Vergiss es. Das hätte nicht nur Monate sondern Jahre gedauert.

3. Versuch

Das Selbe wie in Versuch 2, nur mit Array.BinarySearch. Tjo, is schnell. Löschte auch hier und da etwas raus, Duplikate waren aber immer noch drin. Auch wieder unbrauchbar.

4. Versuch

Das Array vorher sortiert per Array.Sort, sonst wie im 3. Versuch. Selbes Ergebnis.

Jetzt musste der Gockel herhalten. Viele mit ähnlichen Problemen, aber ohne brauchbare Lösungen. Aber ein Gedankenansatz hat weiter geholfen. Der Code funktionierte natürlich nicht, aber die Grundidee war richtig.

5. Versuch

Also, Ausgangssituation ist immer noch ein Array mit den Zeichenfolgen aus der Datei. Dann das Array sortieren lassen (Array.Sort). Dann eine For Next Schleife erstellen die rückwärts durch das Array geht.

For i As Integer = Content.Length - 1 To 1 Step -1
	If String.Equals(Content(i), Content(i - 1)) Then Content(i) = String.Empty
Next

Es wird der Wert an der aktuellen Position mit der vorigen verglichen. Wenn identisch wird der aktuelle Wert gelöscht / auf String.Empty gesetzt. Später wird ein neues Array erstellt und alle Werte die nicht leer sind rein kopiert. Laufzeit: ca. 2 Minuten, da war's schon fertig.

Dieses Grundprinzip kann man garantiert nicht nur mit Strings verwenden. Auch könnte man natürlich noch ein Dictionary erstellen lassen welche Einträge wie oft vorgekommen sind, eine Variable wie viele Einträge insgesamt entfernt wurden, ...

Warum ich das jetzt hier schreibe?

Ganz einfach. Erstens um Anderen zu helfen, aber auch um ganz klar aufzuzeigen dass viele Wege nach Rom führen. Die Erde ist ja 'ne Kugel, irgendwann wird man schon ankommen. Das Sprichwort ist hier wörtlich zu nehmen. Unzählige Entwickler programmieren, haben wohl auch gute Ideen, aber funktioniert es erst mal dann... tja... funktioniert ja. Auf Performance wird heutzutage gar nicht mehr geachtet.

Leute, achtet mal wieder auf Performance und klatscht nicht blind irgendwas zusammen! Und damit meine ich bei Weitem nicht nur Hobby-Programmierer sondern auch große, namenhafte Firmen! Klar, Optimierung kostet Zeit und somit auch Geld, aber die Benutzer wird es freuen.

Ich schließe mal mit dem Satz ab:

"Qualität ist, wenn der Kunde zurück kommt, nicht das Produkt!"

Edit: Ach ja, das Projekt hat sich gelohnt. Von 187 MB runter auf 145 MB ;)


Fast TraceRoute Header

Beschreibung

Ich kürze das Ganze hier etwas ab: Der normale PC Anwender braucht es nicht. Wer aber weiß was die „tracert.exe“ macht, der schaut sich einfach das Video an.

Wer es nicht weiß aber trotzdem neugierig ist darf das natürlich auch ;)

p.s.: Ja, ich hole mir ein besseres Mikrofon ;)

Systemanforderungen

  • Windows 2000 oder neuer
  • Microsoft .Net Framework 2.0 oder neuer (ab XP im Betriebssystem integriert)

Mittels dem Mono Framework sollte die Anwendung auch unter ReactOS, Linux und MacOS laufen, dies ist aber als experimentell zu sehen.

Lizenz

  • Die Nutzung der Anwendung ist frei für private und kommerzielle Zwecke – solange kein Geld hiermit verdient wird.
  • Die Bearbeitung ist untersagt (z. B. das Ändern des Copyrights). Dies schließt auch „Installer“ oder „Downloader” ein die dem Benutzer andere Software anbieten. Siehe Punkt 1.
  • Die Nutzung des Quelltextes unterliegt diesen Richtlinien: http://source.tightdev.net/License.aspx

Download

Binary: FTraceRt_20170305.zip (71,58 kb)
Source: http://source.tightdev.net/Project.aspx?p=FastTraceRt

Nutzung:

Einfach entpacken und in einem Konsolenfenster (cmd oder PS) mit der IP Adresse oder Hostnamen als Argument starten. Es ist keine Installation notwendig.

ScreenCast

 


NetScan Logo

Beschreibung

NetScan ist ein Tool um ihr Heimnetzwerk zu scannen. Vielleicht kennen Sie das, aus irgendeinem Grund brauchen Sie die IP Adresse von einem Gerät was bei Ihnen im Netzwerk ist. Diese Adressen werden normalerweise automatisch von Ihrem Router vergeben. Möchten Sie jetzt z. B. ein Gerät sperren brauchen Sie die IP Adresse.

Dieses kleine Tool braucht nur gestartet zu werden und scannt automatisch alle Netzwerke durch mit denen Ihr Computer verbunden ist und listet die gefundenen Geräte auf, incl. deren IP und MAC Adresse.

Das Ganze können Sie auch unten in meinem ScreenCast in Aktion sehen. Es ist mein erster öffentlicher ScreenCast, also nicht gleich zerfleischen ^^

p.s.: Ja, ich hole mir ein besseres Mikrofon ;)

Systemanforderungen

  • Windows 2000 oder neuer
  • Microsoft .Net Framework 2.0 oder neuer (ab XP im Betriebssystem integriert)

Mittels dem Mono Framework sollte die Anwendung auch unter ReactOS, Linux und MacOS laufen, dies ist aber als experimentell zu sehen.

Lizenz

  • Die Nutzung der Anwendung ist frei für private und kommerzielle Zwecke – solange kein Geld hiermit verdient wird.
  • Die Bearbeitung ist untersagt (z. B. das Ändern des Copyrights). Dies schließt auch „Installer“ oder „Downloader” ein die dem Benutzer andere Software anbieten. Siehe Punkt 1.
  • Die Nutzung des Quelltextes unterliegt diesen Richtlinien: http://source.tightdev.net/License.aspx

Download

Binary: NetScan_2.1.zip (147,16 kb)
Source: http://source.tightdev.net/Project.aspx?p=NetScan

Nutzung:

Einfach entpacken und starten. Es ist keine Installation notwendig.

ScreenCast


Microsoft .Net Framework Logo

Heute nur ganz kurz…

Die Zeit schreitet ja voran, es gibt nicht nur neue Betriebssysteme sondern auch neue Versionen vom .Net Framework. Für den eigentlichen Benutzer unsichtbar, manchmal wegen massiven Updates sogar nervig, wird es dennoch von vielen Anwendungen benötigt.

Was ist das überhaupt?

Das Microsoft .Net Framework (für Windows und mittlerweile auch ReactOS) sowie auch das Mono Framework (Linux, MacOS) nutzen Entwickler um schneller und portabler Anwendungen zu entwickeln, da das Frarmework einem viele lästige Aufgaben abnimmt. Vergleichbar mit Java, auch wenn der Vergleich sehr hinkt, weil Java ist ja nicht grade für die Performance bekannt ist (welche eben nicht existiert)… Aber das Prinzip ist ähnlich.

Wo liegt das Problem?

Ganz einfach. Es gibt mittlerweile 3 verschiedene Versionen der Runtime, nämlich 1, 2 und 4. In wie weit 1 unterstützt wird kann ich nicht sagen, ich bin erst mit der 2 eingestiegen. Das ist der Kern der .Net Versionen 2.0, 3.0 und 3.5 (letztere haben nur die Funktionalität erweitert). Diese war schon bei Windows XP, Vista und 7 vorinstalliert. Nutzte man ein noch älteres System musste man es halt nachrüsten.

Jetzt kommt aber das Problem. Neuere Betriebssysteme wie Windows 8(.1) und Windows 10 setzen auf die Runtime 4 (also Version 4.0, 4.5 oder 4.6). Die 2er Runtime, also das Framework 3.5 in diesem Fall ist nicht mehr vorinstalliert. Will man jetzt also eine Anwendung starten die für das .Net Framework 2 kompiliert wurde erscheint eine Warnmeldung:

Anders als früher kann man das Framework nicht lokal installieren. Das geht nur von der Windows DVD (angeblich, nie selbst getestet) oder online.

Aber das Ganze ist meistens nicht nötig. Man kann .Net Framework 2 Anwendungen auch in der 4er Runtime laufen lassen.

Und wie?

Dazu muss eine Datei erstellt werden die so heißt wie das Programm was man starten möchte, mit „.config“ als Dateiendung, also zum Beispiel „MeineAnwendung.exe.config“.

Diese Datei einfach im Notepad oder einem anderen Text Editor eurer Wahl öffnen und folgenden Text hinein kopieren:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<startup useLegacyV2RuntimeActivationPolicy="true">
		<supportedRuntime version="v2.0.50727"/>
		<supportedRuntime version="v4.0"/>
	</startup>
</configuration>

Damit wird der 4er Runtime erlaubt, auch diese Anwendung auszuführen, selbst wenn sie für die 2er kompiliert wurde.

Softwareentwicklern sei trotzdem dringend angeraten die Software in der neuen Runtime ausgiebig zu testen, da es natürlich immer zu Kompatibilitätsproblemen kommen kann. Ist mir zwar bisher noch nicht passiert, aber sicher ist sicher.

Fazit:

Mal wieder so eine Kleinigkeit die man als Entwickler wissen sollte. Man stelle sich vor man erstellt eine CD / DVD mit einer Autostart Anwendung und alles was man bekommt ist das oben gezeigte Bild. Unschön. Und da es nur eine harmlose Textdatei ist, sollte es ja kein Problem sein diese gleich mit einzubinden.

Zur Not könnte man sich auf 2er Basis einen Loader schreiben der denn auf die 2er oder 4er Binary verweist, falls dies notwendig sein sollte. Ich wüsste nicht warum, aber Anwendungsgebiete sind ungefähr so vielseitig wie eine DNA. ;)


Wer kennt das nicht…

aus irgendeinem Grund muss man seinen Computer neu aufsetzen. Ich hatte ja schon vor kurzem darüber geschrieben: Windows und Office Updates.

Kurz vorweg, dieser Artikel richtet sich eher an (Hobby-)Administratoren statt an Privatanwender.

Aber das in dem Artikel erwähnte WSUS Offline fängt halt nur Windows und Office Updates ab, und auch nicht zu 100% alle. Programme wie Visual Studio, SQL Server, … bleiben außen vor. Wer – wie ich – mehrere Systeme zu warten hat möchte vielleicht auch noch die fehlenden Updates parat haben. Das ist prinzipiell kein Problem.

Updates finden und herunterladen

In dem Microsoft Update-Katalog findet man sämtliche Updates auch zum Download, häufig als .msp oder .msu Datei. Manchmal ist es auch eine .cab Datei, die kann mit Programmen wie z. B. 7zip entpackt werden. In dem Suchfenster muss man die KB Nummer eintragen. Aber die muss man erst mal kennen.

Wie kommt man an diese KB Nummern?

Lasst Windows- oder besser Microsoft Update durchlaufen, stellt die Einstellungen aber vorher so ein dass die Updates nicht installiert werden. So seht ihr (nach einer gefühlten Ewigkeit) sämtliche Updates die installiert werden sollten.

Jetzt ist es Fleißarbeit. Daher lohnt sich es auch nur wenn ihr die häufiger installieren müsst. Macht dem Katalog auf (wohlgemerkt am Besten im Internet Explorer), gebt die KB Nummer im Suchfeld ein (z. B. KB1234567) und ihr bekommt eine Liste mit Updates die zu dieser Nummer passen. Lasst euch nicht irritieren wenn das Update mehrfach auftaucht. Die Updates gibt es häufig für 32 Bit (x86) und 64 Bit (x64) Systeme, außerdem kann es das selbe Update nicht nur für Windows 7 sondern auch 8, 10, … geben, die zwar z. B. die selbe Lücke schließen (daher die selbe KB Nummer), aber eben auf das Betriebssystem angepasst sind.

Updates installieren

Wie eingangs erwähnt, häufig bekommt ihr .msu (Windows) oder .msp (Office) Dateien. Grade bei Office sind es häufig .cab Dateien, die müssten erst mit z. B. 7zip entpackt werden weil sich darin ggf. mehrere .msu oder .msp Dateien befinden. Gelegentlich bekommt man auch .exe Dateien. .msu, .msp und .exe einfach starten und abwarten.

Blöd nur wenn es gefühlte 5674 Stück sind…

Um das Ganze zu automatisieren habe ich ein kleines Programm geschrieben. Quelltext und Download findet ihr unten. Das Programm macht nichts anderes als in dem Ordner in dem es liegt und in allen Unterordnern nach *.msu, *.msp und Install.bat Dateien zu suchen und diese nacheinander auszuführen / zu installieren. So könnt ihr zum Beispiel Updates auf Setup DVDs hinzufügen und müsst nachher nur noch den Updater starten, fertig. Das einzelne Runterladen bleibt euch jedoch nicht erspart…

Wenn das Tool läuft sollte man den PC nebenbei nicht verwenden. Idealerweise sogar kurz die Netzwerkverbindung trennen, nicht dass Windows Updates währenddessen auch noch zuschlägt.

Alle 3 zusammen

Wenn die Updates fertig geladen sind geht es los das Update Verzeichnis zu erstellen. Ich empfehle diese Struktur:

\x64
\x86
\MspInstaller.exe

Im Ordner x64 halt alle Updates für 64 Bit, in x86 alle 32 Bittigen. Wie gesagt, Unterordner werden auch durchsucht und installiert, man kann es also weiter aufschlüsseln:

\x64\Windows7
\x64\Office2010
…

Einziges Problem sind die .exe Dateien. Häufig könnte man die auch entpacken, aber das funktioniert nicht immer (das Entpacken vielleicht, die Installation scheitert dann aber). Daher sucht das Tool auch nach einer Install.bat. Diese zu erstellen ist recht leicht, aber kostet etwas Zeit. Startet die .exe mit dem Parameter /? dahinter, beispielsweise „KB123456.exe /?“. Häufig bekommt man dann Informationen wie eine automatisierte / unbeaufsichtigte / unattended Installation starten kann. Hier ein Beispiel einer Install.bat:

@ECHO OFF
ECHO KB2538243 (Sicherheitsupdate C++ 2008 SP1)...
X86-all-vcredist_x86_470640aa4bb7db8e69196b5edb0010933569e98d.exe /q
IF NOT ["%errorlevel%"]==["0"] (
    ECHO Installation fehlgeschlagen!
    PAUSE
)

Das muss natürlich immer für jede .exe angepasst werden.

So. Einmal gestartet sucht das Tool nach unterstützten Update Dateien (halt die Install.bat, *.msu und *.msp, in dieser Reihenfolge) im Eigenen Verzeichnis, dann pro Unterverzeichnis nach den Dateien, danach weiter in den nächsten Unterverzeichnissen usw.. Wenn ein Verzeichnis den Namen „x86“ hat wird es ignoriert wenn ein 64 Bit Betriebssystem verwendet wird, ebenso „x64“ wenn ein 32 Bit System verwendet wird. Sofern kein Fehler auftritt läuft die Installation unbeaufsichtigt durch, das Konsolenfenster bleibt aber offen um Erfolg zu melden.

Screenshot (hier beim Durchlauf einer Visual Studio 2008 Installation):

Download:

Version: 1.0.2016.0601

Binary (ausführbare Datei):
MspInstaller.exe (154,00 kb)

Quelltext:
http://nopaste.tightdev.net/?ID=kthpw5
VB.Net, Projekttyp: Konsolenanwendung, Starttyp Sub Main. Nicht vergessen im Manifest Admin zu erfordern.


Aus irgend einem Grund…

… ich weiß nicht warum. Aber zumindest bei einem frisch installiertem Windows 7 klappt es nicht mehr statt Windows Updates auf Microsoft Updates umzuschalten. Letzteres würde auch Updates für Office, SQL Server und weitere beziehen.

Hätte ich gerne. Aber das Aktivieren geht nicht mehr. (Absicht?) Erst nach der Installation (und erstmaligem Starten) von Office funktioniert es.

Daher habe ich gesucht und ein kleines VBScript im Netz gefunden was ich leicht angepasst habe. Dadurch werden die Microsoft Updates aktiviert. Hier aber als startbare Datei, weil benutzerfreundlicher.

Edit 08.06.2016:
Wichtig: Der PC muss über eine Internet Verbindung verfügen, sonst funktioniert es nicht. Warum? Keine Ahnung. Ist einfach so.

Quelltext und Download:

Quelltext:

Wieder recht klein, aber erfolgreich. Da es aus VBS kommt is nich mit Option Strict. Egal, ist zwar unschön, aber geht auch so.

Friend Module App

	Friend Sub Main()

		Dim ServiceManager = CreateObject("Microsoft.Update.ServiceManager")
		ServiceManager.ClientApplicationID = "ActivateMSUpdates"
		Dim NewUpdateService = ServiceManager.AddService2("7971f918-a847-4430-9279-4a52d1efe18d", 7, "")

	End Sub

End Module

Projekttyp VB.Net, Framework 2, Konsolenanwendung, Starttyp Sub Main.

Download:

ActivateMSUpdates.exe (7,50 kb)


Man muss sich nur zu helfen wissen…

… so heißt es. Die Windows UAC hat mich heute geärgert. Kann mal vorkommen bei älterer Software die dem Betriebssystem nicht mitteilt dass sie Admin Rechte braucht. Fazit: Die Installation schlägt fehl.

Häufig reicht es dann eine Befehlszeile (cmd) als Admin zu öffnen und die Anwendung oder Befehle darin zu starten. Aber das ist mit Tipperei verbunden und für manche Leute unzumutbar. In meinem Fall hat mich das Microsoft SQL Server 2005 Management Studio geärgert.

Man könnte jetzt sagen, ja, Rechtsklick und „als Administrator starten“. Klar. Geht bei .msi Dateien aber nicht ;)

Da ich primär nach universell nutzbaren Lösungen suche die auch Nutzerfreundlich sind habe ich mal ein kleines Programm geschrieben was im Endeffekt nichts Anderes macht als zu verlangen dass es als Admin gestartet wird und dann die Datei startet die im Dateinamen steht.

Beispiel und Verwendung:

Wenn die Datei „RunAsAdmin_test.exe.exe“ heißt würde sie die Datei „test.exe“ ausführen. Ein einfaches Umbenennen reicht also. Alle Parameter und Rückgabewert wird weiter geleitet. Das ganze funktioniert mit allen startbaren Dateien, wie .exe, .bat, .msi, …

Quelltext und Download:

Quelltext:

Der Quelltext ist so klein, da lohnt sich NoPaste nicht:

Friend Module App

	Friend Function Main(ByVal Args As String()) As Integer

		Using p As New Diagnostics.Process
			p.StartInfo.Arguments = String.Join(" ", Args)
			p.StartInfo.FileName = IO.Path.GetFileNameWithoutExtension(Environment.CommandLine.Trim.Trim(""""c)).Substring(11)
			p.Start()
			p.WaitForExit()
			Main = p.ExitCode
		End Using

	End Function

End Module

Das wars schon. … Naja, fast. In den Projekteigenschaften muss noch festgelegt werden dass die Anwendung Admin Rechte benötigt. VB.Net, Framework 2.0, Starttyp Sub Main, Konsolenanwendung.

Alternativ hier der Download:

RunAsAdmin_test.exe.exe (7,50 kb)

Es sind manchmal eben auch die kleinen Dinge die die Welt begeistern ;)