Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

"ASP.NET Core Web Application (.NET Core)"와 "ASP.NET Core Web Application (.NET Framework)" 차이점

아래의 질문/답변에도 있군요. ^^

Difference between using the ASP.NET Core Web Application (.NET Core) with net461 set as the only framework and using the (.NET Framework) template
; http://stackoverflow.com/questions/37452041/difference-between-using-the-asp-net-core-web-application-net-core-with-net46

정리해 보면, 그 둘간의 차이는 project.json의 설정에 기인한 것이고, 그에 따라 말 그대로 기반 프레임워크가 ".NET Core"냐 ".NET Framework"에 따른 차이일 뿐입니다.

쉽게 생각해서, ".NET Core" 기반의 "ASP.NET Web Application"을 만드는 것도 가능하지만, 어차피 동일한 ".NET Binary"이기 때문에 그것을 ".NET Framework" 기반에서도 운영할 수 있습니다.

하지만, "ASP.NET Core Web Application (.NET Core)" 프로젝트는 다중 플랫폼을 지원하지만 "ASP.NET Core Web Application (.NET Framework)"의 경우 오직 (Full .NET Framework 가 설치된) 윈도우 환경에서만 구동할 수 있습니다.

그럼, 왜 (.NET Core)와 (.NET Framework) 2가지를 만들어놨는지 의아스러울 수 있는데요. 가령, 다중 플랫폼 기반을 선호해서 ".NET Core" 위주로 개발된 프로젝트가 윈도우 용으로 동작할 때는 다른 라이브러리를 사용해야 하는데, 하필 그것이 .NET Framework에 의존적인 거라고 가정해 보겠습니다. 그런 상황에서 단지, 그 라이브러리 때문에 .NET Core 웹 프로젝트를 따로 유지하면서 별도로 "ASP.NET Web Application" 프로젝트를 가져가는 것은 부담일 수밖에 없습니다.




그 둘 간의 결정적인 차이점이라면, "(.NET Core)" 프로젝트는 빌드하면 .dll 파일이 나오고, "(.NET Framework)" 프로젝트는 .exe 파일이 나온다는 점입니다. 왜냐하면, Core 용은 호스팅이 dotnet.exe에서 되기 때문에 .dll로 되는 반면, (.NET Framework) 용은 ".NET Core"가 설치되지 않은 일반적인 ".NET Full Framework"가 설치된 환경에서도 구동될 수 있도록 "dotnet.exe"를 포함한 별도의 .exe 파일로 만들어지기 때문입니다.

실제로 배포된 바이너리를 기준으로 (.NET Core)의 web.config은 dotnet.exe와 .dll을 명시하고,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\WebApplication1.dll"" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>
<!--ProjectGuid: 028962a2-4bfe-4352-8f7d-6ee7fb543516-->

(.NET Framework)는 .exe를 명시하고 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\WebApplication1.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>
<!--ProjectGuid: 66d5ea31-7436-44c2-8822-3cc000945e6e-->

따라서, (.NET Framework) 프로젝트는 ".NET Core Windows Server Hosting bundle"까지는 필요 없고 단지 그 구성요소 중의 하나인 "ASP.NET Core Module"만 해당 컴퓨터에 설치되어 있으면 됩니다. (즉, .NET Core가 설치되어 있을 필요가 없습니다.)

ASP.NET Core Module overview
; https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module

그렇긴 한데, 현재 "ASP.NET Core Module"만을 위한 설치 파일은 없고 ".NET Core Windows Server Hosting bundle"에 함께 포함되어 배포되기 때문에 어쩔 수 없이 ".NET Core Runtime"과 ".NET Core Library"가 함께 설치가 됩니다.

물론 방법이 없는 것은 아닙니다. 다음과 같이 소스 코드를 공개하고 있기 때문에,

ASP.NET Core Module (소스 코드)
; https://github.com/aspnet/AspNetCoreModule

빌드해서 별도로 설치해 주면 됩니다. 또는, ".NET Core Windows Server Hosting bundle" 설치 파일인 aspnetcoremodule_x64_en_preview1_72.msi 파일을,

C:\ProgramData\Package Cache\{42C46B8A-86A1-4B94-9E9C-06B4BD6D8737}v1.0.1970\packages\aspnetcoremodule_x64_en_preview1_72.msi

이런 식으로 해제하면,

msiexec /a aspnetcoremodule_x64_en_preview1_72.msi TARGETDIR=c:\temp\ancm /qb

msi 압축이 해제된 폴더에서 aspnetcore.dll 파일을 구할 수 있습니다. 이것을 각각 다음의 폴더에 복사한 후,

C:\Windows\System32\inetsrv
C:\Windows\SysWOW64\inetsrv

다시, 저 2개 폴더의 하위에 있는 \config 폴더의 "applicationHost.config" 파일에 globalModules의 하위 노드에 다음과 같이 등록해 주시면 됩니다.

<configuration>
...[생략]...
    <system.webServer>
        ...[생략]...
        <globalModules>
            ...[생략]...
            <add name="AspNetCoreModule" image="%SystemRoot%\system32\inetsrv\aspnetcore.dll" />
        </globalModules>
    </system.webServer>
</configuration>

이외에 applicationHost.config에 약간의 변경을 가해야 하는데, 음... 일일이 쓰려니 귀찮군요. ^^; 그냥 차라리 aspnetcore.dll만 설치해 주는 더 나은 방법이 있으니 그걸로 해결하시면 됩니다.

그건 바로! ^^ 이미 ".NET Core Windows Server Hosting bundle" 설치 파일에서 ".NET Core Runtime"과 ".NET Core Library"에 대한 설치 없이 오직 aspnetcore.dll만 설치할 수 있도록 옵션을 제공하고 있기 때문에 다음과 같이 실행해 주어도 됩니다.

DotNetCore.1.1.0-WindowsHosting.exe OPT_INSTALL_LTS_REDIST=0 OPT_INSTALL_FTS_REDIST=0

하지만 그럴 필요는 많지 않을 것입니다. .NET Core Runtime 정도 설치하는 것이 시스템에 큰 부담이 있는 것은 아니므로 그냥 ".NET Core Windows Server Hosting bundle"을 평범하게 설치하는 경우가 대부분일 것입니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 11/30/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13893정성태2/27/20252225Linux: 115. eBPF (bpf2go) - ARRAY / HASH map 기본 사용법
13892정성태2/24/20252983닷넷: 2325. C# - PowerShell과 연동하는 방법파일 다운로드1
13891정성태2/23/20252500닷넷: 2324. C# - 프로세스의 성능 카운터용 인스턴스 이름을 구하는 방법파일 다운로드1
13890정성태2/21/20252329닷넷: 2323. C# - 프로세스 메모리 중 Private Working Set 크기를 구하는 방법(Win32 API)파일 다운로드1
13889정성태2/20/20253054닷넷: 2322. C# - 프로세스 메모리 중 Private Working Set 크기를 구하는 방법(성능 카운터, WMI) [1]파일 다운로드1
13888정성태2/17/20252498닷넷: 2321. Blazor에서 발생할 수 있는 async void 메서드의 부작용
13887정성태2/17/20253074닷넷: 2320. Blazor의 razor 페이지에서 code-behind 파일로 코드를 분리 및 DI 사용법
13886정성태2/15/20252574VS.NET IDE: 196. Visual Studio - Code-behind처럼 cs 파일을 그룹핑하는 방법
13885정성태2/14/20253236닷넷: 2319. ASP.NET Core Web API / Razor 페이지에서 발생할 수 있는 async void 메서드의 부작용
13884정성태2/13/20253522닷넷: 2318. C# - (async Task가 아닌) async void 사용 시의 부작용파일 다운로드1
13883정성태2/12/20253266닷넷: 2317. C# - Memory Mapped I/O를 이용한 PCI Configuration Space 정보 열람파일 다운로드1
13882정성태2/10/20252581스크립트: 70. 파이썬 - oracledb 패키지 연동 시 Thin / Thick 모드
13881정성태2/7/20252832닷넷: 2316. C# - Port I/O를 이용한 PCI Configuration Space 정보 열람파일 다운로드1
13880정성태2/5/20253172오류 유형: 947. sshd - Failed to start OpenSSH server daemon.
13879정성태2/5/20253407오류 유형: 946. Ubuntu - N: Updating from such a repository can't be done securely, and is therefore disabled by default.
13878정성태2/3/20253198오류 유형: 945. Windows - 최대 절전 모드 시 DRIVER_POWER_STATE_FAILURE 발생 (pacer.sys)
13877정성태1/25/20253249닷넷: 2315. C# - PCI 장치 열거 (레지스트리, SetupAPI)파일 다운로드1
13876정성태1/25/20253709닷넷: 2314. C# - ProcessStartInfo 타입의 Arguments와 ArgumentList파일 다운로드1
13875정성태1/24/20253137스크립트: 69. 파이썬 - multiprocessing 패키지의 spawn 모드로 동작하는 uvicorn의 workers
13874정성태1/24/20253558스크립트: 68. 파이썬 - multiprocessing Pool의 기본 프로세스 시작 모드(spawn, fork)
13873정성태1/23/20252983디버깅 기술: 217. WinDbg - PCI 장치 열거파일 다운로드1
13872정성태1/23/20252885오류 유형: 944. WinDbg - 원격 커널 디버깅이 연결은 되지만 Break (Ctrl + Break) 키를 눌러도 멈추지 않는 현상
13871정성태1/22/20253292Windows: 278. Windows - 윈도우를 다른 모니터 화면으로 이동시키는 단축키 (Window + Shift + 화살표)
13870정성태1/18/20253732개발 환경 구성: 741. WinDbg - 네트워크 커널 디버깅이 가능한 NIC 카드 지원 확대
13869정성태1/18/20253456개발 환경 구성: 740. WinDbg - _NT_SYMBOL_PATH 환경 변수에 설정한 경로로 심벌 파일을 다운로드하지 않는 경우
13868정성태1/17/20253112Windows: 277. Hyper-V - Windows 11 VM의 Enhanced Session 모드로 로그인을 할 수 없는 문제
1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...