엘브로
1
저는 웹폼 위주로 개발하다가, 이번에 처음으로 .NET을 해보는 중입니다.
배포파일 만들려고 게시를 했더니 폴더가 이런식으로 만들어지더라고요?
저는 dll들은 bin폴더에 들어가는 형태인줄 알았건만
wwwroot폴더와 appsettings.json파일 외에는
도대체 무슨 용도인지 알수 없는 폴더가 잔뜩…
이렇게 모르는 파일들을 통 배포하는 방법밖에 없는걸까요?
아니면 다른 방법이 있을지 궁금합니다.
그리고 DLL들이 원래 이렇게 배포폴더 제일 상위폴더에 존재하나요?
1개의 좋아요
각 폴더는 하나의 Culture를 나타내며, 그 안에는 지역화 자원의 위성 어셈블리(Satlelite Assembly) 파일(.resource.dll)이 있습니다.
위성 자원 어셈블리는 닷넷의 자원(Resource) 시스템에 의해 소비되는데, 그 방식은 현재 시스템의 Culture 정보를 읽어,
- 해당하는 컬쳐 디렉토리가 존재하고,
- 그 안에 위성 자원이 있는 경우,
그 위성 자원을 사용합니다.
만약, 하나라도 해당이 되지 않으면 기본 자원을 사용합니다.
기본 자원은 앱 어셈블리에 바이너리로 포함되어 있습니다.
따라서, 필요 없는 컬쳐 폴더를 지워도 프로그램 동작에 아무런 해를 끼치지 않습니다.
물론, 의도적으로 다중 언어를 지원하기 위해 자원을 추가한 경우, 지우면 안되겠죠.
그러나, 나도 모르게 생성된 컬쳐 폴더들은 대부분 Code Analysis와 관련된 언어 자원이 들어 있는데, 이는 콘트롤러 스캐폴딩에 관여하는 Code Generation 의 결과물입니다.
3개의 좋아요
엘브로
3
네 답변 감사합니다!
지워도 되는 파일과 그렇지 않은 파일에 대한 구분을 어떻게 해야할까요?
1개의 좋아요
코드 제너레이션이 만든 자원 파일의 이름에는 "CodeAnalysis"가 포함되어 있습니다.
그런데, 다국이 사이트를 위해 내가 만든 자원 파일은 .resx 파일로 프로젝트에 추가됩니다.
{프로젝트 폴더}\Resources\Home.resx, Home.en.resx, Home.ru.resx…
이 프로젝트를 Build 하면, .resx 파일은 .resource 파일로 컴파일되는데, 이 파일들은 빌드 출력 폴더(\debug 또는 \release)에 생성됩니다.
이때, 지역화 자원들(.en.resx, .ru.resx)은 아래의 폴더에 위치하게 됩니다.
{출력폴더}\Home.resource
{출력폴더}\en\Home.resource
{출력폴더}\ru\Home.resource
이에 반해, Publish 를 하게 되면, 기본 자원인 Home.resx 의 컴파일 결과물은 App 어셈블리에 포함되기에 별도로 존재하지 않고, 지역화 자원들은 위성 어셈블리로 빌드되어 아래의 폴더에 생성됩니다.
\publish\en\Home.resource.dll
\publish\ru\Home.resource.dll
컨트롤러 스캐폴딩과 같이 특별한 경우를 제외하곤, release 폴더에 생성된 Code Analysis 자원들이 publish 폴더에 포함되지 않아 특별히 고려하지 않아도 됩니다.
2개의 좋아요
엘브로
5
도움 많이 되었습니다!
wwwroot와 rumtimes 제외하고 대부분의 폴더 삭제해도 문제없이 실행되네요
추가로 혹시 view 파일은 수정가능할 수 있게 배포하는 방법도 있을까요?
1개의 좋아요
뷰 파일은 렌더링의 재료로, 컴파일 이전에 확정되어야 합니다.
즉, 수정된 모든 형태를 사전에 정의해 놓아야 합니다.
페이지 단위로 뷰를 설계하는 MVC 와 달리, Razor 컴포넌트는 요소 단위로 파편화할 수 있어 그러한 대응에 더 좋습니다.
<secion>
@if(_value is A)
{
<SectionA/>
}
else if (_value is B)
{
<SectionB/>
}
else
{
<SectionC/>
}
</section>
Razor Component 를 페이지 단위로 확장시킨 것이 Blazor 입니다. 그러나, MVC나 Web Page 에도 쓸 수 있습니다.
Integrate ASP.NET Core Razor components with MVC or Razor Pages | Microsoft Learn
2개의 좋아요
배포시 불필요한 하위폴더를 없애고 싶으시다면, 프로젝트에서 옵션을 추가하시면 됩니다.
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
2개의 좋아요
배포 이후에 배포된 파일만을 수정하는 형태로 유지보수를 하는 방식은 지원되지 않을 겁니다.
웹서버 스크립트언어에 가까운 방식이라 이 부분은 배제하시고, 배포 자동화쪽으로 환경 구성하시는 것을 추천드립니다.
3개의 좋아요
tkm
9
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 설치 하신 뒤,
MVC 혹은 RazorPages 서비스 빌더에 AddRazorRuntimeCompilation()
추가하시면 됩니다.