2011-11-09 4 views
1

다른 것들 중에서도 솔루션의 다른 프로젝트에 포함 된 리소스를 추가하는 사용자 지정 MSBuild 작업이 있습니다. 리소스를 추가 한 후 해당 프로젝트를 빌드하고 싶지만 Visual Studio 내에서이 프로젝트를 수행 할 수 없다는 것을 알게되었습니다.다른 솔루션 프로젝트를 빌드하는 MSBuild 작업은 VS에서 실패하지만 MSBuild.exe 명령 줄과 함께 작동합니다.

테스트를 위해 Silverlight 솔루션의 웹 프로젝트에서 사용자 지정 작업을 완전히 제거하고 간단한 AfterBuild 대상을 다시 정의했습니다. 대상은 솔루션의 실버 라이트 응용 프로그램 프로젝트를 구축 할 수있는 MSBuild에서 작업을 사용하고, 다음과 같습니다

<Target Name="AfterBuild"> 
    <PropertyGroup> 
    <LinkedProject>..\SilverlightApplication1\SilverlightApplication1.csproj</LinkedProject> 
    </PropertyGroup> 

    <MSBuild Condition="'$(LinkedProject)' != '' " 
    Projects="$(LinkedProject)" 
    Targets="Build" 
    Properties="CustomFlag=true" > 
    </MSBuild> 
</Target> 

이상한 점은 명령 줄에서 MSBuild를를 사용하는 경우이 아직 시각에서 작동하지 않는, 완벽하게 작동한다는 것입니다 웹 프로젝트를 빌드 할 때의 스튜디오. 나는 이것이 일종의 Silverlight 문제일지도 모른다고 생각하고 대신 작업을 .NET 클래스 라이브러리 프로젝트로 만들었지 만 결과는 동일했지만 명령 행에서 작동했지만 VS 내에서는 작동하지 않았습니다. VS에서는 실제로 오류가 없습니다. Csc 작업이 어셈블리를 컴파일하지 않고 출력을 생성하지 않는 것입니다.

Visual Studio에서이 기능을 사용하려면 어떻게해야합니까?

답변

0

Visual Studio 자세한 정보를 변경하고 빌드 로그를 확인하십시오. 파일이 변경되지 않은 경우 CoreBuild가 실행되지 않아 AfterBuild 대신 AfterCompile을 사용할 수 있다고 생각합니다.

+0

나는 Diagnostic의 자세한 정보를 사용했지만 Csc 작업이 출력을 생성하지 않는 이유는 알려주지 않습니다. 테스트 대상에서 빌드 대상을 호출 할 때 사용자 지정 속성을 사용했습니다. "CustomFlag"라고했는데 MSBuild 작업이 이미 빌드 된 경우에도 프로젝트를 빌드하기에 충분할 것이라고 생각했습니다. CoreCompile 타겟이 호출되고 Csc 태스크조차도 아무 것도하지 않습니다. 또한 테스트에서 웹 응용 프로그램 프로젝트의 AfterBuild 대상을 사용하고 있지만 CoreBuild의 끝 부분에 삽입되는 .targets 파일을 사용하고 있습니다. –

1

'UseHostCompilerIfAvailable = false'속성을 MSBuild 작업에 전달하십시오.

in-process 호스트 컴파일러의 초기 프로젝트 빌드 설정을 다시 사용하기 때문에 MSBuild 작업에서 csc를 호출하면 Visual Studio가 손상 될 수 있습니다. 필자는 동일한 프로젝트를 두 번 구축했습니다. 기본 빌드는 v4.0을 지정하는 AfterBuild MSBuild 태스크와 함께 타겟 프레임 워크 v3.5를 사용하고있었습니다. 나는 같은 문제로 끝났습니다. - csc가 실행되는 것처럼 보였지만 아무런 결과도 산출되지 않았습니다. 무슨 일이 일어 났는지 생각해 보니 UseHostCompilerIfAvailable 속성을 true로 설정하면 csc가 초기 프로젝트 설정을 재사용하는 호스팅 된 컴파일러를 호출하므로 명령 줄에 csc가 "빌드"되어있는 v4.0 어셈블리가 있음에도 불구하고 호스트 컴파일러는 간단하게 방금 만든 v3.5를 덮어 씁니다!

관련 문제