Visual Basic .NET 프로젝트에서 내장 Manifest 자원을 EXE 파일로부터 제거하는 방법
C# 프로젝트의 경우, 속성 창을 통해 "Application" / "Resources" - "Icon and manifest" 범주의 "Manifest" 설정을 다음과 같이 "Create application without a manifest" 값으로 바꿔주면,

msbuild.exe는 해당 .csproj 파일을 빌드할 때 csc.exe 명령행에 "/nowin32manifest" 컴파일러 옵션을 전달합니다. 그렇다면, 당연히 .csproj에 그 설정이 저장되어 있다는 것인데요, 확인해 보면 NoWin32Manifest 노드가 그러한 역할을 하고 있음을 알 수 있습니다.
<PropertyGroup>
<NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>
그렇다면, Visual Basic의 프로젝트 파일도 저 옵션을 넣어주면 되지 않을까요? 확인을 위해 .vbproj 파일을 메모장으로 직접 열고 NoWin32Manifest 옵션을 넣어준 후 빌드해 보면,
vbc : error BC2033: Error embedding Win32 manifest: Option /win32manifest conflicts with /nowin32manifest.
아쉽게도 위와 같은 오류가 발생합니다. Visual Studio의 msbuild가 Visual Basic에 대해서는 무조건 /win32manifest를 전달하는 것으로 보이는데요. 왜냐하면, .vbproj 파일에 app.manifest 파일이 빌드 항목으로 기본 추가되어 있기 때문입니다.
<PropertyGroup>
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
따라서, 해당 PropertyGroup을 추가하지 않도록 다음과 같이 임의의 조건을 추가해 주면 됩니다.
<PropertyGroup Condition=" '$(Configuration)' == 'TEST' ">
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>
위의 2개 조건을 만족해 주면 이제 빌드를 해도 오류가 발생하지 않으며 생성된 EXE 파일을 Visual Studio의 "Resource Editor"를 통해 열어도 RT_MANIFEST라는 항목을 찾아볼 수 없습니다.
참고로, 위와 같이 옵션을 조정하지 않은 경우 RT_MANIFEST 리소스가 이렇게 나옵니다.
(
첨부 파일은 이 글의 테스트 프로젝트를 포함합니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]