2016-08-01 16 views
1

Ich lerne die dotnet CLI (sowie .NET Core) und eine Sache ist nicht klar in Bezug auf Multi-Plattform-Targeting. Angenommen, mein Projekt hat folgenden Abschnitt:.NET Core CLI mit nicht-Core-App, wie funktioniert es?

"frameworks": { 
    "netcoreapp1.0": { 
     ... 
    }, 
    "net451": { } 
    } 

Und ich habe net451 auf meinem PC installiert. Dann führe ich es:

dotnet run -f net451 

Was wird verwendet, um das Projekt zu kompilieren und auszuführen? Ruft es das msbuild von net451 sdk auf? Kann die laufende App noch als .NET Core App betrachtet werden?

Einige nützliche Link:

Running .NET Core apps on multiple frameworks and What the Target Framework Monikers (TFMs) are about

+0

Nicht zu tief tauchen. Microsoft ändert es noch, und MSBuild wird zurück sein. –

+0

Richtig, das ist mein Problem, ich kann ein Werkzeug nicht benutzen, bis ich weiß, wie es funktioniert ... Ich versuche es zu überwinden. – neleus

Antwort

1

Was das Projekt zu kompilieren verwendet wird und betrieben werden? Ruft es das msbuild von net451 sdk auf?

Sie selbst herausfinden können, ob Sie die -v Flagge zu dotnet hinzufügen:

> dotnet -v run -f net451 

Project hwapp (.NETFramework,Version=v4.5.1) will be compiled because expected outputs are missing 
     C:\code\hwapp\bin\Debug\net451\rtmapp.exe 
     C:\code\hwapp\bin\Debug\net451\rtmapp.pdb 
     C:\code\hwapp\bin\Debug\net451\win7-x64\rtmapp.exe 
     C:\code\hwapp\bin\Debug\net451\win7-x64\rtmapp.pdb 
Compiling hwapp for .NETFramework,Version=v4.5.1 
Running C:\Program Files\dotnet\dotnet.exe "C:\Program Files\dotnet\sdk\1.0.0-preview2-003121\csc.dll" -noconfig @C:\code\hwapp\obj\Debug\net451\dotnet-compile-csc.rsp 
Process ID: 4900 

Compilation succeeded. 
    0 Warning(s) 
    0 Error(s) 

Time elapsed 00:00:01.4136972 


Running C:\code\hwapp\bin\Debug\net451\win7-x64\rtmapp.exe 
Process ID: 12208 
Hello World! 

> dotnet -v run -f netcoreapp1.0 

Project hwapp (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing 
     C:\code\hwapp\bin\Debug\netcoreapp1.0\rtmapp.dll 
     C:\code\hwapp\bin\Debug\netcoreapp1.0\rtmapp.pdb 
     C:\code\hwapp\bin\Debug\netcoreapp1.0\rtmapp.deps.json 
     C:\code\hwapp\bin\Debug\netcoreapp1.0\rtmapp.runtimeconfig.json 
Compiling hwapp for .NETCoreApp,Version=v1.0 
Running C:\Program Files\dotnet\dotnet.exe "C:\Program Files\dotnet\sdk\1.0.0-preview2-003121\csc.dll" -noconfig @C:\code\hwapp\obj\Debug\netcoreapp1.0\dotnet-compile-csc.rsp 
Process ID: 12084 

Compilation succeeded. 
    0 Warning(s) 
    0 Error(s) 

Time elapsed 00:00:01.6766971 


Running C:\Program Files\dotnet\dotnet.exe exec --additionalprobingpath C:\Users\Svick\.nuget\packages C:\code\hwapp\bin\Debug\netcoreapp1.0\rtmapp.dll 
Process ID: 9068 
Hello World! 

Beachten Sie, dass der C# -Compiler, ist direkt verwendet wird, in beiden Fällen, csc, (es die .Net-Core Version von csc, so dass es mit dotnet csc.dll ausgeführt wird). Der Hauptunterschied zwischen den beiden ist die .rsp-Datei, die zusätzliche Argumente für csc enthält.

In der net451 Version, der interessante Teil davon sieht wie folgt aus:

-out:"C:\code\hwapp\bin\Debug\net451\hwapp.exe" 
-r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll" 
-r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll" 
-r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll" 
-r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll" 

Dies ist, was es bedeutet, net451 zu verwenden: Das Referenz Baugruppen für .Net Framework 4.5.1 verwendet werden, um die Anwendung zu kompilieren .

In der netcoreapp1.0 Version sieht es aus wie diese (abgeschnitten):

-out:"C:\code\hwapp\bin\Debug\netcoreapp1.0\hwapp.dll" 
-r:"C:\Users\Svick\.nuget\packages\Microsoft.CSharp\4.0.1\ref\netstandard1.0\Microsoft.CSharp.dll" 
-r:"C:\Users\Svick\.nuget\packages\Microsoft.VisualBasic\10.0.1\ref\netstandard1.1\Microsoft.VisualBasic.dll" 
-r:"C:\Users\Svick\.nuget\packages\Microsoft.Win32.Primitives\4.0.1\ref\netstandard1.3\Microsoft.Win32.Primitives.dll" 
-r:"C:\Users\Svick\.nuget\packages\System.AppContext\4.1.0\ref\netstandard1.6\System.AppContext.dll" 
-r:"C:\Users\Svick\.nuget\packages\System.Buffers\4.0.0\lib\netstandard1.1\System.Buffers.dll" 
-r:"C:\Users\Svick\.nuget\packages\System.Collections\4.0.11\ref\netstandard1.3\System.Collections.dll" 
-r:"C:\Users\Svick\.nuget\packages\System.Collections.Concurrent\4.0.12\ref\netstandard1.3\System.Collections.Concurrent.dll" 

Beachten Sie, dass .Net Standard Library Referenz Baugruppen stattdessen verwendet werden.

In beiden Fällen wird Msbuild überhaupt nicht verwendet.

Kann die laufende App noch als .NET Core App betrachtet werden?

Ich glaube nicht. Ich würde sagen, es handelt sich um eine .NET Framework-App, die mit dem .NET Core CLI/SDK erstellt wurde. Ja, es ist verwirrend.

+0

Das war genau was ich suchte! Vielen Dank. Der Hauptunterschied zu alten .net-Dateien ist also, wie die Kompilierung durchgeführt wird, csc.dll vs msbuild. Jetzt, wenn Microsoft verspricht, es zurück zu bringen, nehme ich an, dass es zwei Arten der Kompilation geben wird: – neleus

+1

@Neleus Nope, es sei denn ich missverstanden sie. Wenn MSBuild zurück ist, wird alles auf MSBuild basierend geändert. –

Verwandte Themen