2016-08-01 4 views
1

dotnet CLI (.NET 코어는 물론)를 배우고 있으며 다중 플랫폼 타겟팅과 관련하여 한 가지 확실하지 않은 점이 있습니다. 내 프로젝트에 다음 섹션이 있다고 가정 해 보겠습니다.비 핵심 응용 프로그램을 실행하는 .NET Core CLI는 어떻게 작동합니까?

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

그리고 내 PC에는 net451이 설치되어 있습니다. 그런 다음 실행합니다 :

dotnet run -f net451 

프로젝트를 컴파일하고 실행하는 데 사용되는 것은 무엇입니까? net451 sdk에서 msbuild를 호출합니까? 실행중인 응용 프로그램을 .NET 핵심 응용 프로그램으로 간주 할 수 있습니까?

몇 가지 유용한 링크 :

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

+0

너무 깊이 잠수하지 마십시오. Microsoft는 여전히이를 변경하고 있으며 MSBuild가 다시 돌아올 것입니다. –

+0

바로 그게 내 문제입니다. 어떻게 작동 하는지를 알기 전까지는 도구를 사용할 수 없습니다 ... 나는 그것을 극복하려고 노력하고 있습니다. – neleus

답변

1

프로젝트를 컴파일하고 실행하는 데 사용됩니다 무엇입니까? net451 sdk에서 msbuild를 호출합니까? 당신이 -v 플래그 dotnet에 추가하는 경우

당신은 자신을 찾을 수 있습니다 : 두 경우 모두, CSC는, C# 컴파일러가 직접 사용하는 것이

> 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! 

공지 사항 (이것은 닷넷 핵심이다 csc 버전이므로 dotnet csc.dll을 사용하여 실행됩니다. 이 둘의 주요 차이점은 csc에 대한 추가 인수가 들어있는 .rsp 파일입니다. net451 버전에서

는, 그것의 흥미로운 부분은 다음과 같습니다 : 응용 프로그램을 컴파일하는 데 사용되는 참조 어셈블리를 닷넷 프레임 워크 4.5.1 :

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

이 그것을 net451 사용하는 것이 무엇을 의미하는지입니다 . netcoreapp1.0 버전에서

, 그것은이 (절단)과 같다

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

공지 .Net Standard Library 그 기준 조립체가 대신 사용된다.

어느 경우이든 msbuild는 전혀 사용되지 않습니다.

실행중인 앱을 여전히 .NET Core App으로 간주 할 수 있습니까?

나는 그렇게 생각하지 않는다. .NET Framework CLI/SDK를 사용하여 만든 .NET Framework 응용 프로그램이라고 할 수 있습니다. 예, 혼란 스럽습니다.

+0

그게 내가 찾고 있던 바로 그거야! 감사. 그래서 오래된 .net 물건의 주요 차이점은 컴파일이 어떻게 수행되는지, csc.dll과 msbuild가 어떻게 다른지에 관한 것입니다. 이제 Microsoft가 다시 가져올 것을 약속하면 두 가지 컴파일 방법이 있다고 가정합니다. – neleus

+1

@neleus는 내가 잘못 이해하지 않는 한 말하지 않습니다. MSBuild가 돌아 오면 모든 것이 MSBuild 기반으로 변경됩니다. –