방법: 빌드 이벤트 지정(C#)
빌드 이벤트를 사용하여 빌드 시작 전 또는 빌드 완료 후에 실행되는 명령을 지정할 수 있습니다. 빌드 이벤트는 빌드가 빌드 프로세스의 해당 위치에 제대로 도달한 경우에만 실행됩니다.
프로젝트가 빌드되면 빌드 전 이벤트가 PreBuildEvent.bat이라는 파일에 추가되고, 빌드 후 이벤트는 PostBuildEvent.bat이라는 파일에 추가됩니다. 오류를 검사하려면 직접 만든 오류 검사 명령을 빌드 단계에 추가하십시오.
참고
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.
빌드 전 이벤트 및 빌드 후 이벤트 지정 방법
빌드 이벤트를 지정하려면
솔루션 탐색기에서 빌드 이벤트를 지정할 프로젝트를 선택합니다.
프로젝트 메뉴에서 속성을 선택합니다.
빌드 이벤트 탭을 선택합니다.
빌드 전 이벤트 명령줄 상자에 빌드 이벤트의 구문을 지정합니다.
참고
빌드 전 이벤트는 프로젝트가 최신 상태이고 빌드가 트리거되지 않은 경우 실행되지 않습니다.
빌드 후 이벤트 명령줄 상자에 빌드 이벤트의 구문을 지정합니다.
참고
.bat 파일을 실행하는 모든 빌드 후 명령 앞에 call 문을 추가하십시오. 예를 들면 call C:\MyFile.bat 또는 call C:\MyFile.bat call C:\MyFile2.bat를 사용할 수 있습니다.
빌드 후 이벤트 실행 상자에 빌드 후 이벤트를 실행할 조건을 지정합니다.
참고
긴 구문을 추가하거나 빌드 전 이벤트/빌드 후 이벤트 명령줄 대화 상자에서 빌드 매크로를 선택하려면 줄임표 단추(…)를 클릭하여 편집 상자를 표시합니다.
빌드 이벤트 구문에는 명령 프롬프트나 .bat 파일에서 사용할 수 있는 모든 명령을 포함할 수 있습니다. 배치 파일의 이름 앞에는 call이 있어야 이어지는 모든 명령이 실행됩니다.
참고 빌드 전 또는 빌드 후 이벤트가 성공적으로 완료되지 않은 경우 성공적인 동작을 나타내는 0 이외의 코드로 이벤트 동작이 종료되도록 하여 빌드를 종료할 수 있습니다.
예제: 빌드 후 이벤트를 사용하여 매니페스트 정보를 변경하는 방법
다음 절차에서는 빌드 후 이벤트에서 호출되는 .exe 명령을 사용하여 응용 프로그램 매니페스트(프로젝트 디렉터리의 .exe.manifest 파일)에서 최소 운영 체제 버전을 설정하는 방법을 보여 줍니다. 최소 운영 체제 버전은 4.10.0.0과 같이 네 부분으로 구성된 번호입니다. 이를 위해 명령에서 매니페스트의 <dependentOS> 섹션을 변경합니다.
<dependentOS>
<osVersionInfo>
<os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
</osVersionInfo>
</dependentOS>
응용 프로그램 매니페스트를 변경하기 위해 .exe 명령을 만들려면
명령에 대한 콘솔 응용 프로그램을 만듭니다. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
새 프로젝트 대화 상자에서 **Visual C#**을 확장하고 Windows와 콘솔 응용 프로그램 템플릿을 차례로 클릭합니다. 프로젝트 이름을 ChangeOSVersionCS로 지정합니다.
Program.cs에서 파일의 맨 위에 있는 다른 using 문에 다음 줄을 추가합니다.
using System.Xml;
ChangeOSVersionCS 네임스페이스에서 Program 클래스 구현을 다음 코드로 바꿉니다.
class Program { /// <summary> /// This function will set the minimum operating system version for a ClickOnce application. /// </summary> /// <param name="args"> /// Command Line Arguments: /// 0 - Path to application manifest (.exe.manifest). /// 1 - Version of OS ///</param> static void Main(string[] args) { string applicationManifestPath = args[0]; Console.WriteLine("Application Manifest Path: " + applicationManifestPath); // Get version name. Version osVersion = null; if (args.Length >=2 ){ osVersion = new Version(args[1]); }else{ throw new ArgumentException("OS Version not specified."); } Console.WriteLine("Desired OS Version: " + osVersion.ToString()); XmlDocument document; XmlNamespaceManager namespaceManager; namespaceManager = new XmlNamespaceManager(new NameTable()); namespaceManager.AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1"); namespaceManager.AddNamespace("asmv2", "urn:schemas-microsoft-com:asm.v2"); document = new XmlDocument(); document.Load(applicationManifestPath); string baseXPath; baseXPath = "/asmv1:assembly/asmv2:dependency/asmv2:dependentOS/asmv2:osVersionInfo/asmv2:os"; // Change minimum required operating system version. XmlNode node; node = document.SelectSingleNode(baseXPath, namespaceManager); node.Attributes["majorVersion"].Value = osVersion.Major.ToString(); node.Attributes["minorVersion"].Value = osVersion.Minor.ToString(); node.Attributes["buildNumber"].Value = osVersion.Build.ToString(); node.Attributes["servicePackMajor"].Value = osVersion.Revision.ToString(); document.Save(applicationManifestPath); } }
이 명령은 두 개의 인수를 사용합니다. 그 중 하나는 응용 프로그램 매니페스트의 경로, 즉 빌드 프로세스에서 매니페스트가 생성되는 폴더로서 대개 Projectname.publish이고 다른 하나는 새 운영 체제 버전입니다.
프로젝트를 빌드합니다. 빌드 메뉴에서 솔루션 빌드를 클릭합니다.
C:\TEMP\ChangeOSVersionVB.exe와 같이 디렉터리에 .exe 파일을 복사합니다.
다음으로는 빌드 후 이벤트에서 이 명령을 호출하여 응용 프로그램 매니페스트를 수정합니다.
빌드 후 이벤트를 호출하여 응용 프로그램 매니페스트를 수정하려면
게시할 프로젝트에 대한 Windows 응용 프로그램을 만듭니다. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
새 프로젝트 대화 상자에서 **Visual C#**을 확장하고 Windows와 Windows Forms 응용 프로그램 템플릿을 차례로 클릭합니다. 프로젝트 이름을 CSWinApp로 지정합니다.
솔루션 탐색기에서 프로젝트를 선택하고 프로젝트 메뉴에서 속성을 클릭합니다.
프로젝트 디자이너에서 게시 페이지를 찾아 게시 위치를 C:\TEMP\로 설정합니다.
지금 게시를 클릭하여 프로젝트를 게시합니다.
매니페스트 파일이 빌드되어 C:\TEMP\CSWinApp_1_0_0_0\CSWinApp.exe.manifest로 저장됩니다. 매니페스트를 보려면 파일을 마우스 오른쪽 단추로 클릭하고 연결 프로그램을 클릭한 다음 목록에서 프로그램 선택을 선택하고 메모장을 클릭합니다.
파일에서 <osVersionInfo> 요소를 검색합니다. 예를 들면 버전은 다음과 같습니다.
<os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
프로젝트 디자이너에서 빌드 이벤트 탭을 클릭하고 빌드 후 편집 단추를 클릭합니다.
빌드 후 이벤트 명령줄 상자에 다음 명령을 입력합니다.
C:\TEMP\ChangeOSVersionCS.exe "$(TargetPath).manifest" 5.1.2600.0
프로젝트를 빌드하면 이 명령이 응용 프로그램 매니페스트의 최소 운영 체제 버전을 5.1.2600.0으로 변경합니다.
$(TargetPath) 매크로는 작성 중인 실행 파일의 전체 경로를 나타내므로 $(TargetPath).manifest는 bin 디렉터리에 생성되는 응용 프로그램 매니페스트를 지정합니다. 게시하면 위에서 설정한 게시 위치에 이 매니페스트가 복사됩니다.
프로젝트를 다시 게시합니다. 게시 페이지로 이동하고 지금 게시를 클릭합니다.
매니페스트를 다시 봅니다. 매니페스트를 보려면 게시 디렉터리를 열고 파일을 마우스 오른쪽 단추로 클릭한 다음 연결 프로그램을 클릭하고 목록에서 프로그램 선택을 선택한 다음 메모장을 클릭합니다.
버전은 다음과 같아야 합니다.
<os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />