Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기
(연관된 글이 5개 있습니다.)
3.3. PDB 파일에 따른 Debug 정보 - .NET 2.0 Web Site Model 유형의 프로젝트

이제 남은 유형은 .NET 2.0에서만 제공되는 Web Site Model 유형의 프로젝트군요. 이번에도 역시 이전에 살펴본 BaseLibrary C# 라이브러리 프로젝트를 사용할 것입니다. Web Site 유형의 파일 시스템을 기반으로 하는 만큼 단순히 "Site"라는 폴더를 만들고 그 안에 "Default.aspx" 파일을 만들어서 cs 파일에 다음과 같은 코드를 추가합니다.

    protected void Page_Load(object sender, EventArgs e)
    {
        BaseLibrary.ThrowClass throwClass = new BaseLibrary.ThrowClass();
        throwClass.TestMethod();
    }

이야기는 이전의 것과 이어지기 때문에, 여기서는 Web Site 유형에서만 특화된 부분만을 부가적으로 설명을 해나가겠습니다.

우선, 아시는 것처럼 Web Site 유형의 프로젝트는 별도의 "프로젝트 파일"이 없다는 특징이 있지요. 즉, 이것은 곧 프로젝트 관련한 설정들을 저장할 공간이 딱히 없기 때문에 개발자 임의대로 수정할 만한 사항이 많지 않습니다. 실제로, Web Site 유형의 프로젝트 관련 속성들은 sln 파일에 얹혀서 지내고 있습니다. 음... 꽤 서럽겠군요. ^^;

이번에도 실제 서비스 하는 것을 염두에 두고 설명해 나갈텐데요. Web Site 모델이 유용한 것으로는 2가지 컴파일 유형이 있으며, 그 외에 Web Application Model과 비슷한 유형의 컴파일 유형까지 지원해 주고 있습니다. 각각의 경우에 대해서 PDB 파일의 의미를 살펴보겠습니다.

1. cs 소스 파일 및 aspx 까지 모두 웹 애플리케이션 프로젝트에 올려 놓고 서비스하는 경우.
Web Site 모델이 유용할 수 있는 컴파일 설정 모델입니다. 예를 들어, 예전의 asp 시절과 마찬가지로 cs 소스 파일도 런타임에 즉각적으로 수정해서 반영시킬 필요가 있는 상황에서 사용될 수 있습니다. 또는 개인용 웹 사이트 처럼 그다지 복잡하지 않은 사이트 유형에 적합할 수 있습니다. 이 단계는 별도의 publish 절차를 거치지 않고, Web Site 프로젝트가 있는 폴더 그대로를 가상 디렉토리로 만드는 것으로 바로 서비스가 되어질 수 있습니다.

이런 유형은, 현재 VS.NET 2005의 "Debug" / "Release" 빌드 설정과는 전혀 무관하게 compilation[@debug]의 값에만 전적으로 의존하게 됩니다. 이 값이 true이면 모든 소스는 debug 모드로 컴파일 되어지고 PDB 파일도 함께 생성되어집니다. 반면 false이면, 모든 파일들이 release 모드로 컴파일되고 PDB 파일도 생성되지 않습니다.

결과적으로, compilation[@debug] 설정에 따라서 aspx와 aspx.cs 파일의 빌드 유형과 pdb 유무가 한꺼번에 결정되기 때문에, 디버그 정보를 전혀 얻을 수 없는 release 유형의 DLL들을 얻느냐와 디버그 정보를 얻을 수는 있지만 전체적으로 debug로 컴파일되어 성능이 낮은 유형의 DLL들을 얻을 수 있는지만 결정될 수 있습니다.

말 그대로, 매우 동적인 유형의 웹 사이트 또는 소규모 웹 사이트에 적합한 설정입니다.

2. cs 소스 파일 및 aspx 모두 미리 컴파일 되어 (pre-compiled) 배치되는 서비스.
이것 역시 Web Site 유형에서만 가능한 모델입니다. aspx까지 컴파일 한 것을 직접 배포하기 때문에 사용자는 aspx 파일 조차도 수정할 수 없게 되어, 마치 WinForm 응용 프로그램을 배포하듯이 완전한 형태의 바이너리 파일만을 배포할 수 있습니다.
1번 사항과는 반대로 클라이언트로 하여금 어떠한 수정도 할 수 없게 하고 싶을 때 유용한 형태인데요.

이런 유형으로 배포하기 위해서는, 웹 사이트 프로젝트 속성 창을 띄우고, "MSBuild Options"에서 "Allow this precompiled site to be updatable" 옵션을 해제해야 합니다.

그런데, 이번 유형은 특이한 것이 반드시 publish를 한다는 점인데요. VS.NET 2005의 Solution Explorer에서 마우스 오른쪽 버튼을 이용하여 "Publish Web Site"를 하거나 명령행에서 aspnet_compiler를 이용하는 방법이 있습니다.
PDB 관점에서 바라본다면, "Publish Web Site" 메뉴를 이용해서 publish하는 경우에는 현재의 Build 설정 및 compilation[@debug] 값에 관계없이 무조건 Release 유형으로 PDB 파일 생성 없이 DLL들이 생성되어집니다. 따라서, 예외 발생시 변변한 스택 트레이스 메시지를 얻을 수 없습니다. 하지만, aspnet_compiler를 사용하신다면 다음과 같은 옵션을 통해서 PDB 파일을 생성할 수 있습니다.

aspnet_compiler.exe -d -v /Site -p "D:\temp2\PdbSample\AspNet\WebSiteModel\Site" "D:\temp2\PdbSample\AspNet\WebSiteModel\PrecompiledWeb\Site"

위와 같이 실행하고 나면, Pre-compiled된 바이너리 파일들이 Site 폴더 하위에 생성이 되어지는 데, 확인해 보시면 PDB 파일들이 같이 생성된 것을 볼 수 있습니다. 따라서 예외가 발생하면 소스 파일 및 라인 번호가 나오게 됩니다.

그런데, 다소 불편하지요. 명령행에서 aspnet_compiler를 통하는 것도 그렇고 아예 DLL 자체가 debug 컴파일 되는 것도 만족스럽지 않습니다. 이런 경우, 사용될 수 있는 방법이 web.config에 컴파일러 옵션을 지정하는 것입니다. 다음을 참조합니다.

<configuration>

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" 
               type="Microsoft.CSharp.CSharpCodeProvider, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
               compilerOptions="/debug- /debug:pdbonly" >
      </compiler>
    </compilers>
  </system.codedom>

</configuration>

보시는 것처럼, dll에 대해서는 release 빌드를 하고 pdb-only 유형의 PDB 파일만 생성하도록 하고 있습니다. 이렇게 설정하고 솔루션 탐색기에서 "Publish Web Site" 메뉴를 선택하면 PDB 파일이 포함된 바이너리가 생성되는 것을 확인할 수 있습니다.

그런데, 여기서 잠시 "aspnet_compiler -d"와 결과물을 비교해 볼 필요가 있는데요. dll 파일과 pdb 파일의 크기가 동일한 것을 볼 수 있습니다. 그럼 ^^ aspnet_compiler가 사용하는 "-d" 옵션은 결국 "/debug- /debug:pdbonly"로 풀이된다고 추측해 볼 수 있습니다.

3. aspx 파일은 보존하고, cs 파일만 컴파일하는 유형.

사실 Web Site 모델에서 이런 유형으로 빌드하는 것은, 이전에 설명드렸던 Web Application Model과 비교해서 전혀 장점이 없으므로 하지 않는 것을 권장합니다. Web Application Model의 출현으로 인해, Web Site Model에서의 이런 유형은 앞으로 점차로 없어질 것이므로 굳이 설명하지 않겠습니다. 설명하지 않는 또 다른 이유는, 이 유형의 PDB 생성은 Web Application Model의 상황과 유사합니다.



그럼, 결론을 내려볼까요? 만약 여러분들이 현재 "Web Site Model"로 프로젝트를 진행 중이시라면 위에서 설명한 system.codedom을 통한 빌드 옵션을 설정함으로써 PDB 파일 생성을 직접 제어할 것을 권장합니다.

단지, 여기에는 한 가지 예외 사항이 있는데요. "Publish Web Site"를 통해서 배포를 하지 않고, "Web Deployment Project"를 별도로 만들어서 배포를 하시는 경우에는 굳이 system.codedom을 지정하실 필요 없이 해당 "Web Deployment Project"에서 디버그 관련 옵션을 설정하실 수 있으므로 그것을 따르시면 됩니다.
[연관 글]






[최초 등록일: ]
[최종 수정일: 6/21/2021]

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)
13610정성태4/28/2024207닷넷: 2251. C# - 제네릭 인자를 가진 타입을 생성하는 방법 - 두 번째 이야기
13609정성태4/27/2024232닷넷: 2250. PInvoke 호출 시 참조 타입(class)을 마샬링하는 [IN], [OUT] 특성파일 다운로드1
13608정성태4/26/2024426닷넷: 2249. C# - 부모의 필드/프로퍼티에 대해 서로 다른 자식 클래스 간에 Reflection 접근이 동작할까요?파일 다운로드1
13607정성태4/25/2024473닷넷: 2248. C# - 인터페이스 타입의 다중 포인터를 인자로 갖는 C/C++ 함수 연동
13606정성태4/24/2024630닷넷: 2247. C# - tensorflow 연동 (MNIST 예제)파일 다운로드1
13605정성태4/23/2024779닷넷: 2246. C# - Python.NET을 이용한 파이썬 소스코드 연동파일 다운로드1
13604정성태4/22/2024817오류 유형: 901. Visual Studio - Unable to set the next statement. Set next statement cannot be used in '[Exception]' call stack frames.
13603정성태4/21/2024950닷넷: 2245. C# - IronPython을 이용한 파이썬 소스코드 연동파일 다운로드1
13602정성태4/20/2024963닷넷: 2244. C# - PCM 오디오 데이터를 연속(Streaming) 재생 (Windows Multimedia)파일 다운로드1
13601정성태4/19/2024990닷넷: 2243. C# - PCM 사운드 재생(NAudio)파일 다운로드1
13600정성태4/18/20241014닷넷: 2242. C# - 관리 스레드와 비관리 스레드
13599정성태4/17/2024949닷넷: 2241. C# - WAV 파일의 PCM 사운드 재생(Windows Multimedia)파일 다운로드1
13598정성태4/16/2024993닷넷: 2240. C# - WAV 파일 포맷 + LIST 헤더파일 다운로드2
13597정성태4/15/2024987닷넷: 2239. C# - WAV 파일의 PCM 데이터 생성 및 출력파일 다운로드1
13596정성태4/14/20241101닷넷: 2238. C# - WAV 기본 파일 포맷파일 다운로드1
13595정성태4/13/20241071닷넷: 2237. C# - Audio 장치 열기 (Windows Multimedia, NAudio)파일 다운로드1
13594정성태4/12/20241093닷넷: 2236. C# - Audio 장치 열람 (Windows Multimedia, NAudio)파일 다운로드1
13593정성태4/8/20241094닷넷: 2235. MSBuild - AccelerateBuildsInVisualStudio 옵션
13592정성태4/2/20241230C/C++: 165. CLion으로 만든 Rust Win32 DLL을 C#과 연동
13591정성태4/2/20241207닷넷: 2234. C# - WPF 응용 프로그램에 Blazor App 통합파일 다운로드1
13590정성태3/31/20241086Linux: 70. Python - uwsgi 응용 프로그램이 k8s 환경에서 OOM 발생하는 문제
13589정성태3/29/20241164닷넷: 2233. C# - 프로세스 CPU 사용량을 나타내는 성능 카운터와 Win32 API파일 다운로드1
13588정성태3/28/20241535닷넷: 2232. C# - Unity + 닷넷 App(WinForms/WPF) 간의 Named Pipe 통신 [2]파일 다운로드1
13587정성태3/27/20241397오류 유형: 900. Windows Update 오류 - 8024402C, 80070643
13586정성태3/27/20241605Windows: 263. Windows - 복구 파티션(Recovery Partition) 용량을 늘리는 방법
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...