@IBDesignable: Using class UIView for object with custom class

Aktuell programmiere ich eine kleine iOS Anwendung für meine Tochter. Im Zuge der Entwicklung fand ich heraus, dass es schon seit Längerem möglich ist, eigene Views auch im Interface Builder per @IBDesignable Attribut anzeigen zu lassen. Das ging früher nicht. Natürlich hat mich das sehr gefreut und spontan habe ich das mit einem selbstgezeichneten Control ausprobiert…

Nur hat es leider gar nicht funktioniert. Immer bekam ich eine Warnung:

Using class UIView for object with custom class because the class … does not exist

Nach 1 1/2 Stunden intensiven Ausprobierens, Lesen von Tutorials (in denen natürlich alles super klappt) und dem kurzen Gedanken, den ganzen Mist einfach bleiben zu lassen, kam dann die Erleuchtung und damit auch die Lösung:

Die Modulbezeichnung darf keine Leerzeichen oder Sonderzeichen beinhalten. Also merke:

Wenn Du ein neues Projekt anlegst, verzichte auf Leerzeichen und Sonderzeichen…

nuget.exe in Visual Studio 2017 verwenden

In früheren Versionen von Visual Studio konnte ich nuget Packages erzeugen, indem ich ein Post-Build-Ereignis hinzufügt, das das alte Paket löschte und ein neues durch Aufrufen von nuget.exe erzeugte:

nuget pack "$(ProjectPath)"

Das hat mit einem Mal in Visual Studio 2017 nicht mehr funktioniert. Stattdessen begrüßte mich ein Fehler #9009 in der entsprechenden Zeile, was bedeutet, dass nuget.exe von Visual Studio nicht gefunden werden konnte. Ich kopierte die neueste Verson von nuget.exe in C:\Windows\System32 und konnte das Programm auch erfolgreich von der Windows Console aufrufen. Aber was soll ich sagen? Der Fehler in Visual Studio kam immernoch. Auch in der Visual Studio Nuget Console.

Langer Rede kurzer Sinn (und Facepalm): Da Visual Studio ein 32-bit Programm ist, muss nuget.exe natürlich in C:\Windows\System32\SysWOW64 um es zum Laufen zu kriegen…

Man sollte sein Framework kennen

Man lernt ja auch jeden Tag was neues. Heute habe ich gelernt, dass es to tatsächlich eine nützliche Klasse namens TextFieldParser im .NET Framework gibt, genauer, im Namespace Microsoft.VisualBasic.FileIo. Anders als der Name vermuten lässt, kann man diese natürlich auch in C# nutzen

Sie hilft beim Parsen von Festlängen- oder feldgetrennten Textdateien und ist hier dokumentiert.

Windows PATH revisited

Previously I wrote a post about making sure the Windows PATH environment variable doesn’t exceed a certain length.

I found out it’s possible to use other environment variables to help you shorten the path. For example, you could store the C:\Program Files (x86) prefix in a new environment variable name PA1 and the C:\Program Files prefix in PA2.

You can then write %PA1%\Microsoft\… instead of C:\Program Files (x86)\Microsoft\… in your PATH variable.

NOTE: The new environment variables must be parsed by the system before the PATH variable, which also means they must appear before PATH when sorted alphabetically.

Determine 1st of month

Sometimes you need to get a DATE that is the first of the current month in Microsoft Dynamics NAV. This is not as trivial as it may sound, but the following command does it:

CALCDATE('<CM+1D-1M>')

This date formula gets the current month (that’s always the last day of the month in NAV), adds a day (so we are on the first of the next month) and subtracts a month. Here you go.