2016-05-23 16 views
66

Za każdym razem, gdy buduję projekt przy użyciu nowych szablonów .NET Core RC2, jestem , a nie dostarczony z możliwością uruchomienia. Plik EXE. Jeśli kliknę przycisk F5 w celu debugowania aplikacji konsolowej, to działa ona poprawnie przez aplikację. A jeśli użyję w tym poleceniu polecenia, to działa ono również dobrze. Powrót na górę | Ale nie widzę sposobu, aby uruchomić aplikację bez narzędzi .NET Core CLI.Zbuduj plik .exe w .NET Core RC2

Zawartość moim folderze

bin\Debug\netcoreapp1.0\ 

wygląda następująco:

Bin folder structure

Jak widać nie ma to. Plik EXE jest dostępny w wersji. Tylko biblioteka dll.

Czy coś przeoczyłem? A może coś jest nie tak z moim plikiem project.json?

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

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

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

Dzięki!

+0

@DavidPine Odpowiedź tam za użycie compilationOptions jest przestarzała w RC2. Mimo to spróbowałem i dało to ten sam rezultat. –

+0

Masz rację, przepraszam za to. Powinno to być 'buildOptions', a już masz' "emitEntryPoint": true' co powinno wystarczyć. Czy próbowałeś ręcznie uruchomić 'dotnet build' z okna ** cmd **? Czy jesteś pewien, że szukasz odpowiedniego katalogu wyjściowego? –

+0

@DavidPine Tak, próbowałem kompilacji, uruchamiania i publikowania poleceń. Wszystkie działają dobrze. Po prostu nie otrzymuję pliku .exe w folderze bin ani w żadnym folderze źródłowym. –

Odpowiedz

66

Istnieje rzeczywiście 2 modele aplikacji w .NET Rdzeń:

  • Przenośne aplikacje: mocno inspirowane „DNX konsoli apps”, aplikacje te nie wytwarzają .exe pliki, a zamiast tego są wykonywane przez Wspólny runtime .NET Core (którego wersja jest zdefiniowana przez pakiet Microsoft.NETCore.App, dzięki specjalnemu atrybutowi type: platform). Odpowiednie środowisko wykonawcze .NET Core musi być zainstalowane na komputerze, aby można było korzystać z aplikacji przenośnych. Jeśli nie można znaleźć dokładnej wersji, zostanie zgłoszony wyjątek podczas pracy z dotnet run.

  • autonomiczne aplikacje: aplikacje standalone są bardzo podobne do starych dobrych aplikacji konsoli .NET jak oni produkują .exe plików. Środowisko wykonawcze .NET Core nie musi być zainstalowane na maszynie, ponieważ jest bezpośrednio osadzone w samej aplikacji.

Aktualnie używasz pierwszego modelu. Aby korzystać z osobnego modelu, trzeba dostosować swój project.json:

  • Dodaj sekcję runtimes notować środowisk aplikacja będzie docelowy (np win7-x64 lub ubuntu.14.04-x64). Kompletną listę można znaleźć pod adresem here.
  • Usuń zależność Microsoft.NETCore.App. Zamiast tego możesz zastąpić go tym pakietem: "NETStandard.Library": "1.5.0-rc2-24027".

Oto przykład samodzielny 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": { } 
    } 
} 
+2

To wszystko! Dzięki! –

+0

Czy możesz wyjaśnić, czy 'netcoreapp1.Sekcja frameworków 0' jest/nie jest wymagana? To masz listę 'System.Net.Ping' jako zależność - czy można to przenieść do poprzednio zdefiniowanej sekcji' dependencies'? – wal

+3

Żaden z tych modeli aplikacji nie tworzy jednego .exe - Zgaduję, że jest to możliwe tylko w pełnym .NET Framework? –

2

W ASP.NET Core spróbuj zmienić swoją aplikację type do default w project.json:

"Microsoft.NETCore.App": { 
    "type": "default", 
    "version": "1.0.0-*" 
} 
11

Odpowiedź jest w documentation z pełnych krokach teraz.

Można tworzyć dwa rodzaje wdrożeń dla aplikacji .NET Rdzeń:

  1. ramowa zależne od rozmieszczenia
  2. Samodzielne wdrażanie

Dla runnable pliku EXE , należy użyć Self-contained deployment.

3

krok 1: usunąć "type": "platform", z Project.json pod frameworks sekcji

Krok 2: dodaj sekcję czasie wykonywania swojej project.json. Uwaga każda sekcja jest oddzielona przecinkiem. Dodaj środowisko wykonawcze. poniżej jest tylko przykładem na zwycięstwo 10.

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

Krok 3: polecenie przywracania dotnetu na twoim projekcie. (Otwarty cmd, przejdź do folderu projektu gdziekolwiek folderu src jest tam prowadzony dotnet Restor)

krok 4: dotnet pack krok 4: dotnet build -r win10-x64 - lub po prostu budować.

Krok 5: można zauważyć .exe tworzony pod debugowania/netcore/win10/

1

Aby utworzyć runnable aplikacji z aplikacji .NET konsoli podstawowej można użyć dotnet tool. Wystarczy uruchomić w katalogu projektu:

dotnet publish --runtime win7-x64 

To tworzy autonomiczną aplikację (samowystarczalny wdrożenia obejmuje wszystkie niezbędne biblioteki spożywających co najmniej 60MB na dysku). Oczywiście możesz także wybrać inne środowiska wykonawcze, takie jak osx.10.11-x64 lub ubuntu.16.04-x64.

Jeśli korzystasz z domyślnej konfiguracji (New Project -> Console App (.NET Core)), nie jest wymagana modyfikacja żadnego pliku konfiguracyjnego.

Powiązane problemy