2016-05-23 29 views
66

Ogni volta che costruisco un progetto utilizzando i nuovi modelli .NET Core RC2, sono non dotato di un eseguibile. EXE file. Se premo F5 per eseguire il debug della mia applicazione console, viene eseguito correttamente tramite l'applicazioneCostruire il file .exe in .NET Core RC2

C:\Program Files\dotnet\dotnet.exe 

. E se uso il comando

dotnet run 

nella cartella, funziona egregiamente. Ma non vedo alcun modo per eseguire l'applicazione senza gli strumenti CLI di .NET Core.

Il contenuto della mia cartella

bin\Debug\netcoreapp1.0\ 

aspetto:

Bin folder structure

Come si può vedere non c'è. File EXE disponibile. Solo la DLL.

Sto trascurando qualcosa? O c'è qualcosa di sbagliato nel mio file 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" 
    } 
    } 
} 

Grazie!

+0

@DavidPine La risposta per l'utilizzo di compilationOptions è deprecata in RC2. L'ho provato lo stesso, e ha dato lo stesso risultato. –

+0

Hai ragione, mi dispiace per quello. Dovrebbe essere 'buildOptions' e hai già il' "emitEntryPoint": true' che dovrebbe fare il trucco. Hai provato a eseguire manualmente 'dotnet build' dalla finestra della linea ** cmd **? Inoltre, sei sicuro che stai cercando nella giusta directory di output? –

+0

@DavidPine Sì, ho provato a compilare, eseguire e pubblicare comandi. Funzionano tutti bene. Non riesco a ottenere un file .exe nella mia cartella bin o in una cartella sottostante. –

risposta

66

In realtà ci sono 2 modelli di applicazioni in .NET Nucleo:

  • applicazioni portatili: fortemente ispirato "DNX applicazioni console", queste applicazioni non producono .exe file e vengono invece eseguite dal .NET Core runtime condiviso (la cui versione è definita dal pacchetto Microsoft.NETCore.App, grazie al suo attributo speciale type: platform). Il corrispondente runtime di .NET Core deve essere installato sulla macchina per poter utilizzare le app portatili. Se non è possibile trovare la versione esatta, viene generata un'eccezione durante l'esecuzione di dotnet run.

  • Standalone apps: applicazioni stand-alone sono davvero simili alle buone applicazioni console .NET vecchi in quanto producono .exe file. Il runtime di .NET Core non deve essere installato sulla macchina, perché è direttamente integrato con l'applicazione stessa.

Attualmente stai utilizzando il primo modello. Per utilizzare il modello stand-alone, è necessario ottimizzare il vostro project.json:

  • aggiungere una sezione runtimes per elencare gli ambienti la vostra applicazione sarà bersaglio (per esempio win7-x64 o ubuntu.14.04-x64). È possibile trovare l'elenco completo here.
  • Rimuovere la dipendenza Microsoft.NETCore.App. Puoi sostituirlo con questo pacchetto: "NETStandard.Library": "1.5.0-rc2-24027".

Ecco un esempio di un'applicazione stand-alone: ​​

{ 
    "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

Ecco fatto! Grazie! –

+0

Puoi spiegare se il 'netcoreapp1.La sezione quadri 0' è/non è richiesta? Avete elencato 'System.Net.Ping' come una dipendenza - potrebbe essere spostato nella sezione' dependencies 'precedentemente definita? – wal

+3

Nessuno di questi modelli di app produce un singolo .exe - Immagino che sia possibile solo su .NET Framework completo? –

2

In ASP.NET Core provare a cambiare la vostra applicazione type a default, in project.json:

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

La risposta è nel documentation con gradini completi adesso.

È possibile creare due tipi di implementazioni per applicazioni core NET:

  1. quadro-dipendente distribuzione
  2. autonomo dispiegamento

Per un file exe eseguibile , è necessario utilizzare Self-contained deployment.

3

passo 1: rimuovere "type": "platform", da Project.json sotto frameworks sezione

fase 2: aggiungere la sezione fase di esecuzione per la vostra project.json. Nota ogni sezione è separata da una virgola. Aggiungi il tuo runtime. sotto è solo un esempio per la vittoria 10.

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

Passo 3: comando di ripristino dotnet sul progetto. (Aperta cmd, andare alla cartella di progetto ovunque cartella src è lì, eseguire restor dotnet)

Fase 4: dotnet pack Fase 4: dotnet build -r win10-x64 - o semplicemente costruire.

Passo 5: si può notare exe creato sotto debug/netcore/win10/

1

Per creare un'applicazione eseguibile da un'applicazione console .NET core è possibile utilizzare il dotnet tool. Basta eseguire nella directory del progetto:

dotnet publish --runtime win7-x64 

Questo crea un'applicazione stand-alone (distribuzione self-contained; include tutte le librerie necessarie consumano almeno 60 MB sul disco). Naturalmente puoi anche scegliere altri runtime, come osx.10.11-x64 o ubuntu.16.04-x64.

Se si è utilizzata la configurazione predefinita (New Project -> Console App (.NET Core)), non è necessaria alcuna modifica di alcun file di configurazione.

Problemi correlati