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.

Hinweise zum System.Threading.Timer

Eventuell funktioniert die Übergabe eine State-Objekts an einen System.Threading.Timer nicht – man sieht keine Werte, wenn man die Eigenschaften vor der Übergabe an den Constructor des Timers nicht initialisiert. Offensichtlich wird eine Kopie des Objekts angelegt.

Das hier funktioniert nicht:

Der Timer wird immer den Wert 0 in object.Number verwenden.

Das hier funktioniert hingegen wie erwartet:

Same column widths in WPF ListBox

You can use ItemTemplate to style the appearance of entries of a ListBox for example. Sometimes you want to use a Grid, and you want the column widths to be the same for all items of the ListBox. You can simply use the SharedSizeGroup attribute:

Don’t forget to set the Grid.IsSharedSizeGroup attribute to true for the ListBox.