Erstellen Sie eine EXE-Datei in .NET Core RC2

77

Jedes Mal, wenn ich ein Projekt mit den neuen .NET Core RC2-Vorlagen erstelle, wird mir keine ausführbare Datei bereitgestellt. EXE- Datei. Wenn ich zum Debuggen meiner Konsolenanwendung F5 drücke, läuft es einwandfrei über

C:\Program Files\dotnet\dotnet.exe 

Anwendung. Und wenn ich das benutze

dotnet run 

Befehl im Ordner, läuft es auch gut. Ich sehe jedoch keine Möglichkeit, die Anwendung ohne die .NET Core CLI-Tools auszuführen.

Der Inhalt meiner

 bin\Debug\netcoreapp1.0\

Ordner sieht so aus:

Bin Ordnerstruktur

Wie Sie sehen können, gibt es keine. EXE- Datei verfügbar. Nur die DLL.

Übersehe ich etwas? Oder stimmt etwas mit meiner Datei project.json nicht?

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

Vielen Dank!

Johannes Heesterman
quelle
@DavidPine Die Antwort dort für die Verwendung von compilationOptions ist in RC2 veraltet. Ich habe es trotzdem versucht und es gab das gleiche Ergebnis.
Johannes Heesterman
Sie haben Recht, tut mir leid. Es sollte sein buildOptionsund Sie haben bereits das, "emitEntryPoint": truewas den Trick machen sollte. Haben Sie versucht, manuell dotnet buildaus dem Cmd-Zeilenfenster auszuführen ? Sind Sie auch sicher, dass Sie im richtigen Ausgabeverzeichnis suchen?
David Pine
@DavidPine Ja, ich habe versucht, Befehle zu erstellen, auszuführen und zu veröffentlichen. Sie funktionieren alle gut. Ich bekomme einfach keine EXE-Datei in meinem bin-Ordner oder einem zugrunde liegenden Ordner.
Johannes Heesterman
Du solltest netcoreapp1.0 mit "dotnet yourfile.dll" ausführen, denke ich. Nun, das funktioniert für mich sowohl unter Windows als auch unter WSL einwandfrei.
Felype

Antworten:

73

Es gibt tatsächlich 2 App-Modelle in .NET Core:

  • Tragbare Apps : Diese Apps sind stark von "DNX-Konsolen-Apps" inspiriert .exeund produzieren keine Dateien. Sie werden stattdessen von der gemeinsam genutzten .NET Core-Laufzeit ausgeführt (deren Version Microsoft.NETCore.Appdank ihres speziellen type: platformAttributs vom Paket definiert wird). Die entsprechende .NET Core-Laufzeit muss auf dem Computer installiert sein, damit tragbare Apps verwendet werden können. Wenn die genaue Version nicht gefunden werden kann, wird beim Ausführen eine Ausnahme ausgelöst dotnet run.

  • Standalone-Apps : Standalone-Apps ähneln guten alten .NET-Konsolen-Apps, da sie .exeDateien produzieren . Die .NET Core-Laufzeit muss nicht auf dem Computer installiert sein, da sie direkt in die Anwendung selbst eingebettet ist.

Sie verwenden derzeit das erste Modell. Um das eigenständige Modell zu verwenden, müssen Sie Folgendes optimieren project.json:

  • Fügen Sie einen runtimesAbschnitt hinzu, um die Umgebungen aufzulisten, auf die Ihre App abzielt (z . B. win7-x64oder ubuntu.14.04-x64). Die vollständige Liste finden Sie hier .
  • Entfernen Sie die Microsoft.NETCore.AppAbhängigkeit. Sie können es stattdessen durch dieses Paket ersetzen : "NETStandard.Library": "1.5.0-rc2-24027".

Hier ist ein Beispiel für eine eigenständige App:

{
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "warningsAsErrors": true
  },

  "dependencies": {
    "Microsoft.Extensions.Configuration.Binder": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "NETStandard.Library": "1.5.0-rc2-24027"
  },

  "frameworks": {
    "net451": { },

    "netcoreapp1.0": {
      "dependencies": {
        "System.Net.Ping": "4.0.0-rc2-24027"
      },

      "imports": [
        "dnxcore50",
        "dotnet5.6",
        "portable-net451+win8"
      ]
    }
  },

  "runtimes": {
    "win7-x64": { }
  }
}
Kévin Chalet
quelle
2
Das ist es! Vielen Dank!
Johannes Heesterman
Können Sie erklären, ob der netcoreapp1.0Abschnitt Frameworks erforderlich ist / nicht? Das heißt, Sie haben System.Net.Pingals Abhängigkeit aufgeführt - könnte dies in den zuvor definierten dependenciesAbschnitt verschoben werden ?
Wal
3
Keines dieser App-Modelle erzeugt eine einzige EXE-Datei. Ich vermute, dass dies nur mit dem vollständigen .NET Framework möglich ist.
Roman Starkov
@romkyns eine einzelne .exe? Du meinst ohne .dll?
Kévin Chalet
@Pinpoint - tolle Erklärung. Ihr Link zu MS-Dokumenten listet auch Linux-Laufzeiten auf (z. B. debian.8-x64). Können sie als eigenständige Apps erstellt werden?
Alien Technology
13

Die Antwort finden Sie in der Dokumentation mit vollständigen Schritten.

Sie können zwei Arten von Bereitstellungen für .NET Core-Anwendungen erstellen:

  1. Framework-abhängige Bereitstellung
  2. Unabhängige Bereitstellung

Für eine ausführbare EXE-Datei sollte die eigenständige Version " Veröffentlichen" verwendet werden.

zwcloud
quelle
9

Um eine ausführbare Anwendung aus einer .NET Core-Konsolenanwendung zu erstellen, können Sie das Dotnet-Tool verwenden . Führen Sie einfach in Ihrem Projektverzeichnis:

dotnet publish --runtime win7-x64

Dadurch wird eine eigenständige App erstellt (eigenständige Bereitstellung; enthält alle erforderlichen Bibliotheken, die mindestens 60 MB auf Ihrer Festplatte belegen). Natürlich können Sie auch andere Laufzeiten wie osx.10.11-x64oder auswählen ubuntu.16.04-x64.

Wenn Sie die Standardkonfiguration ( New Project -> Console App (.NET Core)) verwendet haben, ist keine Änderung einer Konfigurationsdatei erforderlich.

Jack Miller
quelle
4

Schritt 1: Entfernen Sie "type": "platform",aus Project.json unter frameworksAbschnitt

Schritt 2: Fügen Sie Ihrer project.json einen Laufzeitabschnitt hinzu. Beachten Sie, dass jeder Abschnitt durch ein Komma getrennt ist. Fügen Sie Ihre Laufzeit hinzu. Unten ist nur ein Beispiel für Gewinn 10.

"runtimes": {
       "win10-x64": {}      
     }

Schritt 3: Dotnet-Wiederherstellungsbefehl für Ihr Projekt. (Öffnen Sie cmd, gehen Sie zu Ihrem Projektordner, wo immer sich der src-Ordner befindet, und führen Sie die dotnet-Wiederherstellung aus.)

Schritt 4: dotnet pack Schritt 4: dotnet build -r win10-x64- oder einfach bauen.

Schritt 5: Sie können feststellen, dass .exe unter debug / netcore / win10 / erstellt wurde

Shankar S.
quelle
2

In ASP.NET CoreVersuchen Sie , Ihre App typezu default, in project.json:

"Microsoft.NETCore.App": {
  "type": "default",
  "version": "1.0.0-*"
}
Serj Sagan
quelle