21

좋아요. 그렇기 때문에 나는 지속적인 통합에 관해서는 초보자라는 것을 쉽게 인정합니다.MSBuild - .csproj 파일을 사용하거나 자신의 롤을 사용 하시겠습니까?

필자는 교육 할 수있는 CC.NET 환경을 설정하려고하지만 자동화 된 빌드 부분을 설정하는 데 필요한 정보를 찾는 데 어려움을 겪고 있습니다.

나는 C#에서 VS 2005에서 생성 된 이 유효한 MSBuild 파일 인임을 알고 있습니다. 재치에, 나는 .csproj 파일을 사용 CC.NET에 MSBuild 작업을 통합 할 수있게했지만, 난 이걸로 몇 가지 문제가 있습니다

내가 아니에요 여기에서 일어나는 많은있다
  1. 자동화 된 빌드 환경에서 정말로 필요합니다.
  2. 이 파일을 만들지 않았습니다. 나는 그것을 이해하지 못한다. 그리고 그것은 나를 두려워한다. (Programming By Coincidence)
  3. MbUnit 같은 것을 포함하는 파일을 수정, 1, 2, 3의 결과로 $(MSBuildToolsPath)\Microsoft.CSharp.targets
  4. 를 통해 추상화 될 것으로 보인다 무엇 벌어지고있는 대부분의 것하고보다해야 회선 더 어려워 . 내 유일한 옵션은 AfterBuild 섹션에 포함시키는 것입니다.이 섹션은 나에게 해킹과 비슷합니다.

그래서 CC.NET 직원, MSBuild 직원 및 MbUnit 사람들에게 몇 가지 질문이 있습니다.

  1. MSBuild를 사용하는 경우 VS 생성 .csproj 파일을 빌드 파일로 사용하는 것이 좋습니다? 아니면 내가 직접 만들어야 하나?
  2. MbUnit 테스트는 MSBuild 파일 또는 CC.NET 파일에 속해야합니까? 저의 연구는 MSBuild 파일에 속한다고 제안합니다. 그렇다면 새 MSBuild .proj 파일을 만들고 .csproj 파일 외에도 CVS로 체크인합니까? 또는 MbUnit 작업이 내 .csproj 파일의 일부가됩니까?
  3. 질문 2와 유사합니다. MSBuild 파일에 MbUnit 테스트를 추가하고 .csproj 파일을 사용하면 결국 Target Name="AfterBuild"이 해당 정보를 추가하는 섹션이됩니까? Target Name="Test" 섹션이 있으면 안됩니까? VS 생성 된 .csproj 파일을 사용하여 두 번째 옵션을 방지 할 것으로 보인다.

나는 거기에 많은 것을 알고 있지만, 온라인에서 찾을 수 있었던 대부분의 것들은 내가 갖고 있지 않은 주제에 대해 일정 수준의 친숙 함을 전제로합니다. 이 물건에 대한 학습 곡선은 전혀 곡선이 아니며, 그것은 단계 기능입니다. :)

편집 1 : 텍스트를 좀 더 간결하게 업데이트하고 내가 갖고있는 몇 가지 문제를 해결했습니다.

답변

13

실제로 생성 된 .csproj 파일을 사용하는 것이 좋습니다. 프로덕션 용으로는 생성 된 .sln 파일을 사용하는 것이 좋습니다. 개발자와 동일한 솔루션 파일을 사용하여 얻을 수있는 것으로 나타났습니다.

.sln 파일은 실제로 유효한 msbuild 프로젝트 파일이 아닙니다. msbuild 프로젝트가 입력으로 사용될 때 msbuild 프로젝트로 변환됩니다. 교활한!

학습 목적으로 .csproj 빌드를 로그하고 단계별로 단계별로 단계별로 생각해 볼 수 있습니다. MSBuild는 nant보다 조금 더 선언적이므로 시간을두고 실험 해보십시오.

마지막으로, 귀하의 .sln 또는 .csproj 파일을 msbuild 태스크가있는 연속 빌드 스크립트 프로젝트에 랩핑하여 프로젝트를 빌드하고 유닛 테스트를 함께 실행합니다. 이렇게하면 개발자는 빌드 할 때마다 단위 테스트를 실행할 필요가 없지만 코드를 통합 할 때마다 단위 테스트가 실행됩니다. 그리고 네, 그들이 빨리 달릴 지 확인하십시오! 1 초 이상 걸리는 것은 예정된 (야간?) 빌드 중에 실행해야합니다. 단위 테스트가 적고 단위 테스트 프레임 워크로 작성된 통합 테스트가 1 초 이상 걸리는 경우가 많습니다.

편집 : 내가 유용하다고 것으로 나타났습니다 일부 추가 정보 - 내 생각하지만이 정보는 (은 MSBuild 2.0에서 반환되지 않은 상태에서, 당신은의 .sln 파일에서 대상의 출력을 얻을 수 있습니다 MSBuild에서 3.5을 사용하여 두 버전 모두 .csproj 파일에서 작동해야합니다). 단위 테스트 프레임 워크의 입력으로 출력 (빌드 된 파일)을 사용할 수 있습니다.

0

.csproj를 msbuild의 입력으로 사용하는 것이 좋습니다. 당신은 수동으로 그것에 대한 작업을 csproj에 추가 할 수 있습니다.이 작업은 VS에서 합병하는 동안 무시됩니다. 그러나 사소한 것들을 만들려고한다면 별도의 msbuild 스크립트를 만드는 것이 좋습니다. 그리고 csproj 파일에서 참조 할 수 있습니다. TFS의 일부인 MS Build Server를 살펴 보셨습니까? TFS의 SourceControl과 통합되어 CI에 사용할 수 있습니다. 프로젝트 파일은 msbuild 스크립트입니다.

nAnt를 사용했다면 VS를 서버에 설치해야합니까? 'MSBuild'를 원하셨습니까? 아니요, 반드시 msbuild를 csproj 파일과 함께 사용하기 위해 VS를 설치할 필요는 없습니다.

1

저는 개인적으로 .csproj 파일로가는 것이 좋습니다. 자신 만의 MSBuild 프로젝트를 진행할 때 자신을 추가 할 필요가 없다는 점은 그리 많지 않습니다.

그러나 어떤 경로를 선택하든 빌드 단계의 일부로 MbUnit을 추가하지 말고 CC.Net의 별도 단계로 추가하는 것이 좋습니다. 러닝 유닛 테스트는 일일 CI 사이클의 일부 여야합니다. 그러나 모든 빌드에 포함되어서는 안됩니다.

4

csproj 파일은 그대로 두십시오 (이해할 수는 없지만).

msbuild proj 파일을 만들고 msbuild 작업을 통해 기본 빌드 파일에서 csproj (또는 sln)을 호출하십시오. 빌드 파일을 빌드하도록 CI 서버에 지시하십시오.

이 분리를 통해 자신 만의 사전 및 사후 작업 (단위 테스트, 연기 테스트 SQL 스크립트, fxcop/기타 정적 분석 등)을 쉽게 추가 할 수 있으며 작업 환경을 파괴하지 않습니다. 또한 원하는대로 사용자 지정 대상을 수행 할 수 있음을 의미합니다 (msbuild/ant 등). 코드를 추가하여 MSBuildContrib로 보입니다.

당신은 조심 (내가 마지막으로보고 있기 때문에이 또한 변경되지 않는 한 당신이 배포 프로젝트가 unles) 빌드 서버에

+0

.csproj 파일과 함께 새로운 .proj 파일을 CVS에 체크인합니까? 또는 빌드 서버 및 소스 제어 환경 외부에서만 살고 있습니까? 내 성향은 그것을 조사하는 것이지만 모범 사례가 있다면, 나는 그것을 따르고 싶습니다. – jerhinesmith

+1

** 모든 것이 체크인됩니다. TeamCity 빌드 서버를 여러 빌드 에이전트와 함께 사용합니다. 빌드 서버는 2 개 (ok 이상 2 개)의 것을 알고 있습니다. 소스 (cvs/svn/vss/etc)와 빌드를 수행하는 파일은 어디에 있습니까? (저 batery는 저장해야한다) –

+0

이것은 내가 또한 사용하는 방법이다. 각 프로젝트 (웹 사이트, 웹 응용 프로그램, 응용 프로그램, 확장 프로그램 등)마다 Subversion에 자체 저장소가 있습니다. 하나 이상의 .proj 파일과 .proj 파일을 포함하는 자체 .sln 파일입니다. .sln 파일은 VS 및 쓰기/디버그 코드에서 모든 것을 열 수 있도록하기위한 것입니다. .proj 파일은 CruiseControl 또는 TeamCity가 지속적인 통합을 수행 할 수있게합니다. –

0

OK, 몇 가지를 시각적 stuido 필요하지 않습니다. csproj 형식이 VS2005에서 VS2005로 변경되었습니다. 또한 MSBuild를 사용하는 경우 .vdproj (설치) 파일을 빌드 할 수 없다는 것을 기억하십시오. 그 때문에 당신은 devenv (VS 실행 파일)가 필요합니다. 즉, 항상 devenv를 호출하고 빌드 할 수있는 MSBuild 태스크를 작성할 수 있다고합니다.

자신의 csproj 파일을 만들거나 VS2005에서 만든 파일을 사용할지 여부에 대한 질문으로 중간 도로를 제안합니다 (create your own project template). 필요에 따라 VS가 나머지를 처리하도록합니다.

3

자신의 프로젝트 파일 (* proj로 끝나는 파일은 MSBuild에서 프로젝트 파일로 간주됩니다)을 만들고 거기에서 빌드를 호출하십시오. 이처럼 :

<MSBuild Projects="MySolution.sln" Targets="Clean; Rebuild" Properties="Configuration=$(BuildMode);"> 

주 msbuild를 또한 일반적으로 csproj 파일의 무리를하는 것보다 쉽게 ​​변경없이 (솔루션 파일), ... 난은 NAnt와 MSBuild를 모두 사용

+0

동의합니다. 나는이 방법을 많은 프로젝트에서 사용했으며 잘 작동하는 것 같다. –

2

을의 .sln 구축 할 수 있음 . NAnt는 NAntContrib으로 업그레이드되어 msbuild taks가되었습니다. 나는 일시적인 설정일지도 모르지만 지금까지 나는 중대한 문제에서 뛰지 않았다. 그것은 VS2008에서 사용하는 것과 동일한 csproj/sln을 사용하기 때문에 새로운 csproj 파일을 만들지 않는다고 말했습니다. msbuild를 사용하여 프로젝트를 빌드하면 레거시 NAnt 스크립트가 크게 단순화됩니다 (csc 작업 사용).

참고 :

  1. 당신이 프로젝트에서 Windows 워크 플로 파운데이션을 사용하는 경우 주요 어려움이있을 것이다는 msbuild를하지 않고 같은 프로젝트를 빌드합니다.
  2. 빌드 컴퓨터에 VS.NET을 설치하지 마십시오. Wix 설치 msi 만들기를 사용할 수 있습니다.
  3. @Franci Penov : 달리기 단위 테스트는 모든 빌드에 포함되어야합니다. 내일까지 기다려서 버그를 찾으십니까? 참고 사항 : 단위 테스트는 매우 빠르게 실행되어야합니다.
관련 문제