Donnerstag, 20. August 2015

Jenkins und NuGet V3 mit UWP Apps

Während der Umstellung einiger Apps zu Windows 10 Universal Windows Platform Apps (UWP Apps) kam es wie es kommen musste ich habe auch ein UWP App Projekt mit dem Jenkins bauen wollen.

Es blieb relativ lang beim wollen denn der Nuget package restore wollte nicht funktionieren.

Ich erledige das mit dem Restore über das Ausführen einer Windows Batch Datei mit folgendem "langweiligen" Inhalt:

C:/JenkinsRoot/nuget.exe restore "C:/JenkinsRoot/workspace/Windows10/SolutionFolder/Solution.sln"

Das hat bisher immer super funktioniert... bisher.

Bei UWP Apps werden die Abhängigkeiten mit Nuget V3 aufgelöst und damit musste ich in das JenkinsRoot die neue Nuget.exe vom command-line tool legen.

Das führte aber immer zu folgender Ausgabe:
Restoring packages for UAP,Version=v10.0...
Unable to resolve GoogleAnalyticsSDK (= 1.3.0) for UAP,Version=v10.0.
Unable to resolve Microsoft.ApplicationInsights (= 1.0.0) for UAP,Version=v10.0.
Unable to resolve Microsoft.ApplicationInsights.PersistenceChannel (= 1.0.0) for UAP,Version=v10.0.
Unable to resolve Microsoft.ApplicationInsights.WindowsApps (= 1.0.0) for UAP,Version=v10.0.
Unable to resolve Microsoft.NETCore.UniversalWindowsPlatform (= 5.0.0) for UAP,Version=v10.0.
Unable to resolve Newtonsoft.Json (= 7.0.1) for UAP,Version=v10.0.

Was dazu führte, dass der Build mit folgender Meldung fehlschlug:

 C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.targets(83,5): error : Couldn't find the required information in the lock file. Make sure you have UAP,Version=v10.0.10240/win10-x86 mentioned in your targets.

Wenn ich den gleichen Befehl vom gleichen Verzeichnis aus direkt auf dem Buildserver ausführe geht alles. Irgendwo steckt ein Fehler.

Ich erspare Euch jetzt die zweitausend Versuche die ich unternommen habe um irgend etwas zu ändern und komme gleich zum Ergebnis. Ihr müsst den Jenkins Prozess unter einem "echten" Nutzer laufen lassen. Wie das geht fand ich bei StackOverflow.

Danach läuft alles perfekt und Jenkins ist wieder happy.




Mittwoch, 5. August 2015

Blend Behavior SDK für Windows 10 UWP Apps verwenden

Da ich schon einige Apps von Windows 8 und Windows Universal auf Windows 10 "Universal Windows Plattform - UWP" App migrieren durfte kam ich auch schon an die Stelle, dass mir das Behaviors SDk fehlte.



Ich nutze das in einigen Apps z.B. um mit den EventTriggerBehavior und der InvokeCommandAction im Xaml Commands auf Events zu binden.

Es ist also nicht gerade trivial das in einer großen App wie der Windows Phoen App von Marktjagd nebenher bei der Migration zu ersetzen. Das ist auch gar nicht notwendig denn in UWP Apps können Libraries von Windows 8.1 weiterverwendet werde. also einfach das "alte" Behaviors SDk einbinden und alles ist gut. Dazu einfach auf  "References" einen Rechtsklick dann "Add reference" auswählen und dann zwei mal "Browse" auswählen.

Anschließend zu folgenden Pfad navigieren:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\BehaviorsXamlSDKManaged\12.0\References\CommonConfiguration\Neutral



Auf die Lösung bin ich gekommen durch einen Thread im MSDN Forum gekommen. 


Problem mit der Installation von *.vsix Dateien nach der Installation von Visual Stuido 2015

Nachdem ich bei mir auf dem Arbeitsrechner das Upgrade zu Windows 10 durchgeführt habe und Visual Studio 2015 installiert habe konnte ich die SQLite Extension für Windows UAP Apps nicht mehr installieren.

Erster Versuch war es eine andere Version also die sqlite-uap-3081101.vsix zu finden und zu installieren. Geht nicht.

Zweiter versuch war den Installer (VSIXinstaller.exe) direkt von  \Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE auszuwählen. Hat auch nichts gebracht.

Dann dachte ich okay vielleicht hat es etwas mit SQLite zu tun und habe die bereits bestehenden Extensions für Windows Phone und Windows RT deinstalliert. Einzige Änderung war, dass ich jetzt mehr Druck hatte denn nun ging nichts mehr.

Jetzt habe ich bei meiner Suche ein Issue bei Github gefunden was mich tatsächlich auf die Lösung gebracht hat.

visual Studio 2015 hat bei der Installation unter \Users\ neben dem Ordner
\Users\Alexander Witkowski\ noch einen weiteren Ordner
\Users\alexander%20Witkowski\ angelegt.

Mal abgesehen davon, dass ich den User mit leerzeihen doof finde aber das kam vom Admin liegt hier das Problem. Nach dem ich meinem User Zugriff zu dem Alexander%20Witkowski-Ordner gegeben habe funktionierte die Installation von .vsix-Datein wieder ohne Probleme per Doppelklick.

Also falls Ihr auch Probleme bei der Installation von Visual Stuido Extensions habt schaut ob ihr einen zweiter Userordner habt. In dem liegen dann auch die VSIX-LogDatein.

Dienstag, 10. Februar 2015

AppBarButton mit PathIcon

Heute bestand ein Teil meiner Aufgabe darin, einen AppBarButton mit einem eigenen Icon zu versehen.

Da gibt es ja eine MSDN Seite dazu.

Kein Problem das Icon vom Grafik also PDF speichern lassen, die Dateiendung in *.ai umbenannt und in Blend Importiert.




Von den Importiertem Path die Inhalte von Data kopieren und in der App in ein PathIcon einsetzen.



<AppBarButton Label="XMyAbb" 
              x:Uid="AbbMyAbb" 
              Command="{Binding MyAbbCommand}">
    <AppBarButton.Icon>
        <PathIcon Data="M37.1446,20.828 C63.1168,19.4391                                     63.8108,1.66132 63.2553,19.3002                                     C62.6997,36.9391 59.2272,38.6053                                     59.2272,38.6053 L42.4219,35.8274                                     L36.5886,27.3555 
                        z" Foreground="White" />
    </AppBarButton.Icon>
</AppBarButton>

Alles ganz einfach - aber es funktioniert natürlich nicht wie gedacht.

Ich möchte den Post kurz halten und verrate gleich die Lösung ohne alle meine vergeblichen Versuche mit Alignment, Margin etc. zu beschreiben.

Ich müssten den Path an die 40x40 px Größe des AppBarButtons anpassen.



Das geht am besten mit dem WPF GeometryTransformer. Spielt ein wenig mit den Parametern, die euch das Tool bietet, kopiert die Ausgabe zurück in den XAML Code und schaut im Zweifel im Properties Window ob es passt.


Es gibt dazu auch Infos in einem MSDN Forums Thread und einen guten weiterführenden TechNet Artikel