連続積分.NETフレームワーク


私は、私が練習していたこのポストを書くことを理解します.2005年以降のネットの発展(特にC≧15)!その間、このプラットホームに多大な影響を受けたことは当然である.降臨ネットコアは、これらを再訪問する機会であり、また別のブログ記事の件名です.このポストは、成熟のそれらの年が(すぐに遺産)につながったことを示します.NET Frameworkプラットフォーム.
  • A simple project
  • A more complete project
  • 単純プロジェクト


    スターターのために、原理が比較的簡単に(そして、ほとんど未完成の)適用される方法を見ましょう.NET FrameworkプロジェクトNetMonkey , エー.ネットラッパーMailChimp API (当時はバージョン3.0).必要なのは

  • A solution file ( NetMonkey.sln ).

  • A build file ( NetMonkey.proj ), MSBuildで記述.

  • A script file ( build.bat ) ビルドファイルをローカルで実行するのに役立ちます.

  • A CI configuration file ( appveyor.yml ).プロジェクトの残りの部分はインフラストラクチャのコードです.
  • マッカピカ / ネットモンキー


    エー.mailchimp API v 3用のネットラッパーです。0 .


    解決策


    解決策はVisual Studio 話すa collection of related projects . それらをロードすることができます(Visual Studioで)、そしてMSBuild ).
    この文脈では、ソリューションには2つの目的があります.
  • 開発者がコードを編集するエントリポイントです.
  • パッケージを生成するビルドスクリプトのエントリポイントです.これが実際に2つのソリューションがプロジェクトにある理由です.
  • 主な解決策 NetMonkey.sln はライブラリを生成するために使われる.
  • 第2の解決策 NetMonkey.Tests.sln 関連する単体テストも含まれます.メインプロジェクトは以前の解決策と共有されていますので、開発者が開発に励まされます.
  • ここでの主なポイントは開発者がまだ開発するために通常のツールキットを使うことができるということです.

    ビルドファイル


    これはビルドのcruxですMSBuild . 私も考えているかもしれないCake , あるいはpsake しかし、私のために、何もMSBuildを打ちません.それは獲得した味です、そして、それは最も確かにそれ自身の専用のブログ柱に値します.一方、キーポイントは以下の通りです.
  • イン.NET Framework全体のビルドシステムは、MSBuildに基づいており、プロジェクトファイルは適切で、編集可能なMSBuildファイルです(特にソリューションはありません).実際、Visual StudioはMSBuildプロジェクトのビジュアルエディタとして考えられます.MSBuildを使用すると、統合を強化します.NET Frameworkプラットフォーム.
  • MSBuildのログ出力機能は驚くべきものです.really ).
  • 私はXMLを気にしない.
  • 15年前の真の選択肢はなかった.NAnt ステップ・バック・イム.もう一つの時間.
  • このファイルの要点は一見単純です.
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Rebuild" ToolsVersion="14.0">
      <ItemGroup>
        <Projects Include="NetMonkey.sln" />
      </ItemGroup>
    
      <Import Project="$(MSBuildProjectDirectory)\packages\Isogeo.Build.*\tools\build\Isogeo.Common.targets" />
    </Project>
    
    ただ、主な解決策はNetMonkey.sln ファイル.私自身のコンベンションに従わなければならない(簡単に傾向があるので)私は多くのプロジェクトを共有することができるライブラリのビルドの重要な部分を抽象化することができました.欠点は、すべての状況(例えば、Webアプリケーションやネイティブアプリケーションのような)を処理しようとしてから15年を経て、一般的なライブラリが重くなり、困難になる傾向がある(自分自身を参照)https://github.com/isogeo/Isogeo.Build/blob/531d173efc326afceb013a6ff841e58ffcdaff25/files/build/Isogeo.Common.targets ). しかし、上記のような単純な定義では以下のビルドターゲットを提供します:

  • クリーン:ビルドをきれいにします.
  • これは通常、tmp\ 他のすべてのターゲットがそこで出力を生成するように、フォルダ.

  • コンパイル:指定したソリューションをコンパイルします.

  • Test :プロジェクトをテストします.
  • より具体的には、解決策が提供された解決と同じ名前を持つが、ある.Tests.sln 接尾辞NetMonkey.Tests.sln この場合、それをコンパイルしてテストを実行します.
  • また、OpenCover コード範囲をチェックするには

  • 分析:プロジェクトの静的解析を実行します.
  • If FxCop を検出するとlegacy analysis .
  • もしSonarQube 設定ファイルが存在する場合は解析を行います.
  • 統計情報収集the cloc utility .

  • ドキュメントを生成するtmp\out\bin を使用するプロジェクトSHFB .

  • パッケージ:tmp\out\bin フォルダ).提供されているソリューションの種類によっては以下のようになります.
  • ZIPファイル.
  • ライブラリ用のNUGETファイルthe dependency manager of choice on the .NET platform ).
  • エーWeb Deploy Webアプリケーションのパッケージ.

  • ビルド:ショートカットのコンパイルとテストの組み合わせ.

  • 再構築:クリーンとビルドの組み合わせのショートカット.

  • リリース:クリーン、ビルド、ドキュメント、パッケージと分析の組み合わせのショートカット.
  • プロジェクトからプロジェクトへ行くとき、同じ構造を提供することは私の認知負荷を減らします:私は、いつどこで出発するべきかについてわかっています.また、ツールの大部分がレポートを生成することに注意してくださいtmp\ を選択しますAppVeyor or CodeCov …).

    スクリプトファイル


    スクリプトファイルは、ビルドファイルの簡単なローカル実行を可能にします.簡単ではないかもしれません.
  • MSBuildは通常あなたの%PATH% . 私はこの機能を考えます:それはあなたが複数のバージョンをインストールし、動的に実行時に必要なバージョンを選択することができますWindows Registry .
  • ビルドを改善するために、高度なMSBuild引数を追加できます.例えばa complete log of the build あなたが間違っているかもしれない何かをデバッグするために検査するために生成することができます.
  • ハード依存関係をチェックする必要があります.
  • バッチファイル(cf)のコアです.https://github.com/mcartoixa/NetMonkey/blob/master/build.bat ):
    PUSHD .nuget
    NuGet.exe restore "packages.config" -PackagesDirectory ..\packages
    POPD
    msbuild.exe %PROJECT% /nologo /t:%TARGET% /m:%NUMBER_OF_PROCESSORS% /p:GenerateDocumentation="%GENERATE_DOCUMENTATION%" /fl /flp:logfile=build.log;verbosity=%VERBOSITY%;encoding=UTF-8 /nr:False
    
    とにかく、ローカルビルドをテストすることができます.build.bat .

    CI設定ファイル


    私が使用した略奪前時間CruiseControl.NET 私のプロジェクトを構築するために、それは私に役立った.最近では、はるかに実用的である雲の中に多くのオプションがありますAppVeyor 例えば、Windowsと.長年の間のネット統合.いくつかの点でスイッチを作ったのは避けられなかった.
    しかし、私のビルドがどんなCIプラットホームにも縛られないので、移行は非常に単純でした.それは私のYAMLは非常に簡単https://github.com/mcartoixa/NetMonkey/blob/master/appveyor.yml ), そしてまた簡単にスイッチできますAzure DevOps 例えば.
    設定はbuild.bat CIプラットフォーム用.これは、パッケージの取り扱いを追加するAppVeyor speak ) とリリース.すべてのパッケージは単一のフォルダで出力されますtmp\ou\bin\ コンフィギュレーションによって、設定はとても簡単です.
    artifacts:
      - path: tmp\out\bin\*.nupkg
        type: NuGet
      - path: tmp\out\bin\*.zip
    
    だから、主にリリースについてです.

    より完全なプロジェクト


    ミートGeoSIK , 開発を容易にするために運命づけられたライブラリのセットOGC Web Services イン.ネットそれは、それらのサービスを実装するか、外部の地理空間ライブラリとそれらを統合するために使用された11のライブラリを提供しましたProjNet of Sql Server Spatial Data types ).

    マッカピカ / ジオシーク


    GeoSKは、OGC Webサービスの開発に役立つライブラリのセットです。ネット


    このプロジェクトはもっと複雑だが、その構造は同じだ.そして、あなたが上記の単純なプロジェクトの構造を理解するならば、あなたは現在この1つに踏み込んでいるあまりに多くの問題を持ってはいけません.唯一の大きな変更は、物事を簡単に保つためには、すべてのライブラリを1つの単一のソリューション(11原則のパッケージではなく、1パッケージ、1ソリューション)を構築することを決めた.これは特定のパッケージングシステムを必要としています GeoSIK.proj ( https://github.com/mcartoixa/GeoSIK/blob/master/GeoSik.proj ) もう少し複雑です.
    私にとって、これはコンベンションに大いに依存しますが、このビルドシステムはまだ非常に適応可能です.実際には、システム全体を他のプラットフォームにも適用できます.