1

MSBuild를 통해 빌드를 실행하는 경우 MSBuild에서 /에서 어떤 컨텍스트가 실행됩니까?MSBUILD는 어떤 컨텍스트에서 실행됩니까?

프로젝트가 VS2010 (동일한 시스템에 있음)을 통해 빌드 된 경우 완벽하게 작동하는 명령 행 프로그램 (아약스 축소)을 호출하는 사전 빌드 이벤트가 있기 때문에 내가 묻는 이유는 우리가 빌드 시스템 (CCNet)이이를 구축하고 있습니다. 내가받는 오류는 9009입니다. 즉, 파일을 찾을 수 없다는 것을 의미합니다. 명령 줄 프로그램은 환경 경로가 그 위치에 대해 설정되어 있습니다 (환경 경로는 setx를 통해 설정됩니다. 현재 사용자에 대해서만 설정되어있을 수 있습니다). 따라서 CCNet이 MSBuild를 호출 할 때 그 이름 만 호출하면 다른 모든 경우에 완벽하게 작동합니다.

+0

prebuild 이벤트는 MSBuild Exec 클래스에 의해 실행됩니다. cmd.exe의 숨겨진 인스턴스에서 명령을 실행합니다. 작업 디렉토리는 프로젝트의 출력 디렉토리로 설정되고, 초기 환경은 상위 프로세스로부터 상속됩니다. SETX를 사용하지 * 마십시오. 환경을 수정하지 않습니다. SET을 사용하십시오. PATH를 사용하여 경로를 변경하십시오. –

+0

SET PATH는 어디에 사용해야합니까? 아약스 축소 프로그램을 설치 한 후 SETX를 한 번 사용했습니다. 미리 빌드 이벤트에서 SET PATH를 어떻게 사용합니까? – BlueChameleon

+1

미리 빌드 이벤트에 넣으십시오 : set path = c : \ foo \ bar; % path %. –

답변

1

MSBuild은 다른 개발 도구와 마찬가지로 실행 된 사용자 컨텍스트에서 실행됩니다.

Visual Studio를 통해 msbuild을 실행하면 로그인 컨텍스트에서 Visual Studio가 실행되어 빌드를 실행했기 때문에 Visual Studio를 통해 실행됩니다.

일부 빌드 서비스를 통해 실행하는 경우 해당 빌드 서비스가 작동하는 방식에 따라 대답이 달라집니다. 예를 들어, TFS Build는 TFS Build 서비스의 로그인 자격 증명에 대해 구성한 모든 사용자로 MSBuild를 시작합니다. 서비스로 실행되도록 CC.NET을 구성한 경우 실행중인 사용자를 지정해야합니다. 바로 MSBuild가 실행될 사람입니다.

빌드를 위해 특정 환경을 설정해야하는 경우 몇 가지 옵션이 있습니다. 가장 쉬운 방법은 "거대한 망치"방식이지만 모든 사용자를 위해 빌드 시스템에서 환경을 전역 적으로 구성하는 것입니다. 다른 옵션에는 빌드에서 일종의 사전 구성 단계를 실행하거나 환경을 설정 한 후 수동으로 서비스를 시작하는 시작 배치 파일을 작성하는 것이 포함됩니다.

관련 문제