2009-05-10 4 views
8

이번 주에 msbuild에 관심이 있습니다. 매우 복잡한 빌드 스크립트를 많이 정리하고 있습니다. 얼마나 많은 일을 할 수 있는지 놀랍게 생각합니다. msbuild는 .NET 프로그래밍의 숨겨진 기능입니다.msbuild의 숨겨진 기능

질문에 답이 있어야하는 SO 협약에서 며칠 또는 1 주일 이내에 가장 유용하거나 가장 멋진 숨겨진 기능을 허용 된 것으로 표시하겠습니다. 유용한

let bestAnswer suprise slick useful = (surprise + slick + 2*useful) 

정의 : 데이터베이스를 구축 패키지 (zip 파일) 웹 사이트 및 유틸리티, CC.NET 통합, 발사 시험 (UT + 셀레늄) : 내가 기존에 MSBuild 그 스크립트를 업데이트하고 있습니다. VMWare 가상 서버에 배포하고 체인 된 빌드 (빠른 빌드, 큐 테스트 느림)를 추가합니다. 외부 라이브러리 (예 : MSBuild community tasks)를 참조하는 경우이를 얻는 방법을 알고 있으면 좋을 것입니다.

내가 이미 발견 한 일부 msbuild의 놀라움.

  • 안녕하세요. Message 작업 및 속성을 사용하는 세계.
  • 매우 복잡한 서버 제품의 설치 관리자로 msbuild 사용. MSB community tasks 관리되는 IIS 서버 설치. WriteLinesToFileXmlUpdate 작업이 서버 별 구성 파일을 작성했습니다. MSI와 함께 일하면 MSI보다 설치에 도움이되는 모든 것이 있음을 알게 될 것입니다.
  • 새내기의 경우 : CSProj 및 Vbproj 파일은 msbuild "proj"파일과 동일합니다. 직접 편집하려면 : csproj 또는 vbproj를 언로드 한 다음 프로젝트를 마우스 오른쪽 단추로 클릭하고 편집을 선택하십시오. 이것은 clunky pre-build/post-build 이벤트로 작업하는 것보다 좋고 강력합니다.
  • MSBuild는 일반 .NET 설치와 함께 제공됩니다. 다른 멋진 도구와 달리 완전히 깨끗한 서버/데스크톱에서 사용할 수 있습니다. 여기

내가 쓴 후 msbuild를 안녕하세요, 내가 MSDN hello world을 발견 입니다.

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build;Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <Who>World</Who> 
    </PropertyGroup> 
    <Target Name="Hello"> 
    <Message Text="Hello, $(Who)" Importance="high" ></Message> 
    </Target> 
    <Target Name="Build" DependsOnTargets="Hello"/> 
    <Target Name="Test"/> 
</Project> 
+0

질문이 많기 때문에 커뮤니티 위키일까요? – Naaff

+0

확인. 나머지 "숨겨진 기능들 ..."은 커뮤니티 위키처럼 보입니다. – Precipitous

답변

5

MSBuild에는 많은 유용한 기능이 있습니다. 나는 당신이 다른 내에서 하나 개의 MSBuild 파일을 참조 할 수 있습니다

재귀 파일 사양

<Files Include="$(src)\**\*.cs" Exclude="$(src)\**\*test.cs" /> 

일괄 처리 및 항목 메타 데이터

<ItemGroup> 
<F Include="SampleApplication.t"> 
    <Version>1</Version> 
</F> 
<F Include="SampleApplication2.t"> 
    <Version>1</Version> 
</F> 
<F Include="SampleApplication3.t"> 
    <Version>2</Version> 
</F> 
</ItemGroup> 
<Target Name="Build"> 
<Touch Files="%(F.FullPath)" AlwaysCreate="True" 
     Condition=" '%(F.Version)' > '1' "> 
<Output TaskParameter="TouchedFiles" ItemName="CreatedFiles"/> 
</Touch> 
<Message Text="Created files = @(CreatedFiles)"/> 
<Message Text="%(F.Identity) %(F.Version)"/> 
</Target> 

목표 수준의 의존성 분석

<Target Name="Build" 
      Inputs="@(MyItems)" 
      Outputs="@(MyItems -> '$(MyItems)\%(filename).dll'"> 
+0

재귀 **는 프레임 워크 (CF/Silverlight/.NET/등) 간의 코드 공유에 사용하는 트릭입니다. 매우 유용합니다. –

0

을 좋아합니다. NCover, SourceMonitor, Duplo 등을 실행하는 것과 같은 모든 목표는 공통 대상 파일 내에 있습니다. 각 프로젝트마다 PropertyGroup 및 ItemGroup 섹션과 함께 공통 대상에 대한 include가있는 msbuild 파일을 만듭니다. 이렇게하면 모든 빌드가 동일한 분석 작업 세트를 실행하고 스크립트 작성 시간을 절약 할 수 있습니다.

2
  • 나는 MSBuild Extension 팩이 믿을 수 없을만큼 유용하다는 것을 발견했다. 설명서는 체계적으로 정리되어있어 필요한 정보를 쉽게 찾을 수 있습니다.

  • 그들은 here

  • Attrice 내가 빌드 스크립트 작업을해야 할 경우 내가 자주 사용하는 놀라운 도구가 찾을 수 있습니다 빌드 파일에 대한 인텔리을 구성하는 섹션을 보유하고 있습니다. 당신의 가치는 빌드 스크립트를 실행하면서 빌드 스크립트를 실행하면서 자동 작업과 변수를보고 종속 작업을 표시하는 디버거가 있다는 것입니다. Microsoft Build Sidekick v2.3

  • SVN을 조용하게 설정하면 빌드 프로세스의 속도가 훨씬 빨라 졌다고 느낍니다. 당신의 MSBuild.Community.Tasks.Subversion.SvnExport에 다음을 추가하면 각하고 SVN에서 얻을 수있는 모든 파일을 로그인하지 않고 빌드를 실행

    인수 = "- 힘 -q"

3

은 사용 가능한 모든 CPU 코어를 사용하려면 /M 명령 줄 매개 변수를 사용하십시오.

관련 문제