Erstellen einer .NET Core App über die Befehlszeile, so dass sie auf einem Computer ohne .NET Core funktioniert
Mein end-Ziel ist ein cross-Plattform (nicht-web) - Konsole-Anwendung, so bin ich, Sie zu erkunden .NET Core jetzt.
In meinem vorherigen .NET-Projekten, ich habe alles getan, die Entwicklung in Visual Studio, aber ich habe auch ein batch - /MSBuild-Datei, damit ich bauen könnte, das ganze Projekt (einschließlich setups, von NuGet-Paketen, die zip-Dateien mit binaries etc.) mit einem einzigen Klick. Hier ist ein Beispiel aus einem früheren Projekt.
Am Ende, ich möchte etwas ähnliches machen mit meiner .NET-Core-test-Projekt.
Aber bis jetzt bin ich in Ermangelung an den ersten Schritt: ich bin nicht in der Lage, es zu bauen, außerhalb von Visual Studio, so dass das Ergebnis funktioniert auf einem anderen Windows-Rechner ohne .NET Core installiert ist.
(im ersten Schritt, ich Ignoriere die cross-Plattform-Teil - ich werde glücklich sein, um es zu erhalten zu arbeiten auf Windows)
Was ich
Habe ich es geschafft es zum laufen zu bringen innerhalb von Visual Studio 2015 Community Edition wie folgt:
-
neues Projekt anlegen in Visual Studio: "Neues Projekt" ⇒ "Web" ⇒ "Console-Anwendung (Paket)"
-
erstellen, neu zu veröffentlichen, das Profil in Visual Studio ("Build" ⇒ "Veröffentlichen" im Menü).
Dadurch wird ein PowerShell-Skript (und eine XML-Datei mit Einstellungen)
Hier mein test-Projekt auf GitHub.
Wenn ich "Build" ⇒ "Veröffentlichen" im Menü wieder, Visual Studio offenbar führt die zuvor erstellte PowerShell-Skript erneut aus.
Das Ergebnis ist etwas über 90 MB, besteht aus 825-Dateien in 598 Ordner und sieht wie folgt aus:
Wenn ich kopieren Sie es auf einem anderen Rechner (Win 7 /.NET 4 installiert .NET Core nicht installiert), funktioniert es.
Was ich versucht habe, um das gleiche Ergebnis außerhalb der Visual Studio
1. dotnet veröffentlichen
Diese Antwort und diese Antwort sound wie ich verwenden können dnu publish
das gleiche Ergebnis zu erzielen über die Kommandozeile.
Ich verstehe, dass Teile des .NET Core sind noch bewegliche Ziele, gerade jetzt, so offenbar dnu
ist jetzt dotnet
statt.
Also habe ich versucht auszuführen dotnet publish
(und erstellt eine batch-Datei):
dotnet publish "%~dp0\src\CoreTestVisualStudio" -c Release -r win7-x64 -o "%~dp0\release\cli"
Das Ergebnis besteht aus einem .exe
- Datei und eine Reihe von DLLs, nur 25 Dateien und 1,5 MB, alle in einem einzigen Ordner:
Offensichtlich .NET-Core-runtime fehlt hier, und wie erwartet, ist diese app stürzt ab, wenn ich versuche, führen Sie es auf einem Computer ohne .NET Core installiert (die gleichen wie oben erwähnt).
2. Das PowerShell-Skript aus dem veröffentlichen-Profil
Habe ich versucht auszuführen das PowerShell-Skript (die erstellt wurde, wenn ich die erstellt habe veröffentlichen Profil) außerhalb von Visual Studioaber es ist fehlgeschlagen, da das Skript erwartet einige Parameter, und ich weiß nicht, was zu passieren:
param($publishProperties, $packOutput, $nugetUrl)
Gibt es auch diese Zeile in das Skript:
# to learn more about this file visit http://go.microsoft.com/fwlink/?LinkId=524327
...aber der link ist nur auf die landing page der .NET Web Development and Tools Blog.
TL;DR
Was mache ich falsch?
Ich weiß, dass die erste Version .NET Core ist hauptsächlich auf ASP.NET aber wie ich es verstanden habe, ASP.NET Core-apps sind nur Konsole-apps auch, also dachte ich, eine basic-Konsole-app jetzt klappen würde.
Auf der anderen Seite, die meisten der console app "erste Schritte" docs noch fehlen, so ist es vielleicht einfach zu früh und dotnet publish
für Konsolen-apps ist noch nicht fertig?
Bearbeiten nach ein paar Tagen: ich bin zu Ahnen, dass mache ich nichts falsch und, dass es ein Problem in the.NET Core command line tools, damit ich gab es das command-line-tools " issue tracker.
InformationsquelleAutor der Frage Christian Specht | 2016-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem gelöst!
Ich gab es auf der issue-tracker der .NET-Core-Befehlszeilen-tools, und es stellte sich heraus, dass es ein Fehler war, in
dotnet publish
- es hat nicht bündeln Sie die C++ - runtime, die benötigt wird, führen Sie die kompilierte Anwendung auf einem Rechner ohne .NET Core installiert.Temporäre Lösung war die Installation der C++ runtime.
Den "richtigen" Lösung wurde in einem pull-request vor drei Tagen, die in der neuesten installer jetzt.
Mit dieser version
dotnet publish
hat bündeln Sie die C++ - runtime, damit das Ergebnis der Arbeit auf einem Computer ohne .NET Core.InformationsquelleAutor der Antwort Christian Specht
Für
dnu
:Gibt es eine option für
dnu publish
genannt--runtime
legt fest, dass die Laufzeit sind, wenn die Veröffentlichung. Sie würden die volle Laufzeit name, mit dem Befehl, z.B.:Für
dotnet
:Müssen Sie nicht angeben, die Laufzeit oder framework-Versionen -- standardmäßig
dotnet publish
wird die Verwendung des Frameworks ausproject.json
und die aktuelle Laufzeitumgebung Geschmack. Jedoch, die Dokumentation besagt, dass:InformationsquelleAutor der Antwort Rytmis