2011-01-20 12 views
16

VS2010 MakeFile 프로젝트 (vcxproj) 빌드 방법 VS 2008에서 잘 구축 된 프로젝트가 있고 TFS 빌드를 설치하고 사용하기 시작한 다음 TFS 2010으로 업그레이드했습니다. 모든 것이 여전히 괜찮 았고 올바르게 구축되었습니다 (모든 원격 Visual Studio 2010 클라이언트에서 한 번의 클릭으로 빌드 시작으로 모든 것을 훌륭하게 만들었던 새로운 빌드 프로세스를 구현 한 후에). Visual Studio를 빌드 에이전트에 설치할 필요가 없습니다. 나는 매우 어려운 (매우 하드) 빌드 에이전트에 Visual Studio를 설치하려고하지 않는 내 이해가 필요하지 않기 때문에 우리는 비 개발 컴퓨터에 설치할 수있는 라이센스가 없습니다.TFS 빌드 (VS 2010 없음)

이제 VS 2010으로 솔루션을 업그레이드하고 SQL Server CLR 프로 시저를 대상으로하는 어셈블리이고 .NET 4.0을 아직 지원하지 않기 때문에 .NET 3.5를 대상으로했습니다. 하지만 TFS Build에서는 더 이상 빌드 할 수 없습니다. TFS Build와 MS Build 명령 줄에서 일관된 오류 메시지가 나타나는 것 같지 않지만 C : \ Program Files \ MSBuild \에 있지 않은 Microsoft.Cpp.Targets와 관련이 있다고 생각합니다. Visual Studio를 설치하지 않았습니다. Microsoft Windows SDK 7.1을 설치하여 다른 .NET 4.0 프로젝트 용 svcutil과 같은 .NET 4.0 SDK 도구를 실행할 수 있었지만 아무 것도이 빌드가 원하는 것을 설치하지 않는 것 같습니다.

C : \ TFSBld [...] \ GenerateLanguage \ GenerateLanguage.vcxproj (46,3) : 오류 MSB4019 : 가져온 프로젝트 "C : \ Microsoft.Cpp 오류 TFS 빌드 날입니다 제공 .Default.props "는 입니다. 의 경로가 이고 디스크에 파일이 있는지 확인하십시오.

그리고 내가 그 오류를 클릭하면 그것은 vcxproj 파일에이 라인에 저를 취 정말이 프로젝트에 할 필요가 RESX 파일에서 자원 파일을 생성 할 수 resgen을 실행

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> 

그들을 위성 어셈블리로 컴파일한다. 이 작업을 수행하기 위해 메이크 파일 빌드를 사용하고있었습니다. 수동으로 resgen을 실행했는데 (다른 방법으로 독립형 솔루션으로 위성 어셈블리를 컴파일하는 방법을 찾지 못했기 때문에) DLL을 컴파일했습니다. 그 방법이 지금은 어떻게 작동했는지는 기억이 나지 않지만 AL.exe를 수동으로 실행하여 리소스 파일에서 DLL 파일을 컴파일했다고 생각합니다. 그래서 기본적으로이 프로젝트를 빌드하기 위해 커맨드 라인을 실행할 필요가 있습니다. 전체 프로젝트를 버리고 TFS 빌드 스크립트를 편집하여 하드 코딩 된 커맨드 라인을 실행하지 않고는 합리적인 방법으로이를 수행 할 수 없습니다. 대신. 더 좋은 방법이 있어야합니다.

저는 하루 종일 사용해 왔고 표준 파일 대신에 .targets 파일과 .xml 속성 시트를 작성하려고 시도했지만 내 머리 위로 쓰려고했습니다. 간단히 줄을 삭제하려고했지만 MSBuild는 "빌드"대상이 없다고 불평합니다. vcxproj 파일에 더미를 추가하려고 시도했지만 모든 작업이 완료된 후 사전 및 사후 구축 단계를 실행하지 않는 것 같습니다.

+0

이 질문은 이미 여기에 답변 된 것처럼 보입니다. http://stackoverflow.com/questions/3043294/how-to-build-a-vs2010-c-project-on-a-buildserver 이 질문을 업데이트/제거하는 올바른 방법? – BlueMonkMN

답변

15

Microsoft Windows SDK 7.1에는 여러 가지 설치 옵션이 있습니다. ".NET Development"자식 "Tools"만 선택하면 vcxproj 프로젝트를 빌드하는 데는 C++ 코드 (빌드 전 단계와 빌드 후 단계 만 포함)가 없더라도 분명히 충분하지 않습니다. "Visual C++ 컴파일러"옵션을 추가하고 "Intellisense and Reference Assemblies"확인란을 완전히 선택하면 필요한 파일과 설정이 설치됩니다. 둘 다 필요한지 잘 모르겠지만 그 조합이 저에게 효과적이었습니다. BlueMonkMN에

2

다음 단계를 포함하여 다소 복잡하지만 기능적으로 해결해야 할 사항이 있습니다.

  1. 복사 C에서 이러한 파일 : \ 프로그램 파일 VS2010가 설치되어있는 시스템에서의 MSBuild \ Microsoft.Cpp \ 4.0 \ (86) - 소스 컨트롤 내에서 확인 그들은의 한 부분으로 검색되도록 작업 공간 :
    • Microsoft.Build.CPPTasks.Common.dll
    • Microsoft.BuildSteps.targets
    • Microsoft.Cl.Common.소품
    • Microsoft.Cpp.Default.props
    • Microsoft.Cpp.props
    • Microsoft.Cpp.targets
    • Microsoft.CppBuild.targets
    • Microsoft.CppCommon.targets
    • Microsoft.Link합니다.
    • Microsoft.MakeFile.targets는 Win32 \의 Microsoft.Cpp.Win32.default.props \
    • 플랫폼
    • 플랫폼을 Common.props 의 \는 Win32 \ Microsoft.Cpp.Win32.props
    • Platfotms \는 Win32 \ Microsoft.Cpp.Win32.targets
  2. 변경 작업 공간이 $의 해당 파일을 대신두고 상대 경로를 참조하는 vcxproj 파일 (VCTargetsPath).
  3. AsssemblyName 특성을 사용하는 대신 AssemblyFile = "Microsoft.Build.CPPTasks.Common.dll"특성을 사용하도록 줄을 모두 변경하십시오.
  4. 존재하지 않는 VCTargetsPath 매크로를 참조하는 대신 형제 파일을 찾을 수 있도록 새 위치의 루트에있는 파일에서 "$ (VCTargetsPath) \"을 삭제하십시오. VS200없이 컴퓨터에서 MSBuild를 사용하여 명령 줄 빌드를 실행하고 오류 메시지를 보면서 놓친 인스턴스를 찾을 수 있습니다.
  5. 마찬가지로 자식 디렉터리 파일의 $ (VCTargetsPath)를 상대 경로로 바꿉니다.
  6. Microsoft.Cpp.Win32.targets 파일 끝에 "< VCMessage Code ="MSB8008 ".../>"줄과 다음과 같은 내용이 포함되어 있습니다. <.
  7. 시행 착오, 명령 줄 빌드를 실행하고 내가 언급 한 것을 잊어 버렸을 수도있는 것을보십시오. 나는 그것이 그것의 대부분이었다라고 생각한다.
1

개선 된 대안은 vcxproj의 상단 레벨 1 아이로

<PropertyGroup> 
    <VCTargetsPath Condition="'$(VCTargetsPath)' == ''">[path_to_the_fileset_listed]</VCTargetsPath> 
</PropertyGroup> 

를 추가하는 것입니다.

경로에는 환경 변수 또는 변수가 포함 된 다른 잘 알려진 경로가 포함될 수 있습니다.

이렇게하면 많은 행을 변경하는 것보다 침입이 적고 되돌릴 수 있습니다.

+1

컴퓨터에 어딘가에 해당 Microsoft. * 파일이 필요하지 않습니까? – BlueMonkMN

+0

예, 파일은 어딘가에 있어야하지만 위치는 매우 구성 가능합니다. 이 기능은 파일을 완벽하게 제어하고 파일을 체크 인 상태로 유지하고 원본 파일을 변경하지 않으려 고 할 때 매우 유용합니다. – jesper

+0

그럼 파일을 어디서 구합니까? 위치를 구성 가능하게하는 것은 그 위치에 파일을 가져올 수있는 수단이 없으면 쓸모가 없습니다. – BlueMonkMN

0
VCTargetsPath에 대한 환경 변수를 추가하는

이보다 더 간단한 방법 :

    • BlueMonkMN 으로 한 CPP MSBUILD 폴더를 찾아 예컨대
      • 이름 : VCTargetsPath
      • 값 : 단계에서 MSBuild를 목표로 [경로 1 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
    • 열기 Windows 환경 변수
      • Control Panel > System > Advanced Settings > Advanced > Environment Variables
    • 함께 새로운 사용자 변수를 추가 ]
  1. Visual Studio를 다시 시작하십시오.
  2. 완료. 이제 프로젝트를 구축해야합니다.
관련 문제