7

ビルドプロセス中にコード分析と関連する設定を強制することに関して、TFSのテストインストールでいくつかの設定を設定/オーバーライドしようとしています(プロジェクトファイルの設定に関係なく)

現在、TESTTFSインストールで使用しています。

  • Visual Studio2012Ultimateを開発者のマシンとビルドサーバーにインストール
  • TFS 2012を1台のサーバー(アプリケーションおよびデータ層)にインストールする
  • TFS 2012ビルドサービス(コントローラーとエージェント)を別のサーバーにインストールします

サンプルの.net4.5プロジェクト(クラスライブラリ(DLL)、Webアプリケーションなど)を期待どおりにコンパイルできます。これは、関連するコード分析設定をオーバーライドすることだけを目的としています(うまくいけば)。

シナリオ1-プロジェクト設定を選択したときの開発者マシンのサンプルアプリケーション(ソリューションエクスプローラーで右クリック->プロパティ)で、[ビルド時にコード分析を有効にする]をオンにしてルールを選択した場合は、[コード分析]タブに移動しますドロップダウンから設定すると、実行されたとおりに実行されるため、いくつかの警告が生成されます。この技術は<RunCodeAnalysis>false</RunCodeAnalysis>、メモ帳で開いた場合、*。csprojファイルに追加されます。サンプルプロジェクト/ソリューションをコンパイルするためにビルドが実行されると、コード分析が期待どおりに実行されます。開発者がオフにする可能性があるため、すべてのプロジェクトでこれを実行したくありません(ただし、これを強制するために、チェックインポリシーやプライベート/ゲートチェックインも必要です)。

シナリオ2-[ビルド時にコード分析を有効にする]チェックボックスを無効にして、TFSBuild.projファイルでコード分析を強制できます(TFS 2008からアップグレードするため、プロセス定義としてデフォルトのupgradetemplate.xamlを使用します)。 LIVE TFSのインストール):

<RunCodeAnalysis>Always</RunCodeAnalysis>

これは機能し、これが私たちがビルドでコード分析を強制する方法です(レッスンはまだ学習されていません:-))。

問題は、他の関連するコード分析設定を設定するときに発生します。たとえば、CA警告をエラーとして適用/使用または処理するデフォルトのルールセット。これらの設定の一部は、VSで設定することも、メモ帳で*.csprojを編集することですべて設定することもできます。* .csprojを編集すると、これらの値はビルドで期待どおりに使用されます(開発者のマシンでローカルに使用されます)。すべてのプロジェクトファイルを編集せずにTFSBuild.projで一元的に実行したいので、これは理想的ではありません。TFSbuild.projファイルなどの設定を使用できると思います。

<PropertyGroup>
    <RunCodeAnalysis>Always</RunCodeAnalysis>
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

しかし、それらは機能していないように見えますか、それとも私はそれらを間違った場所に置いていますか?それらを正しく修正/使用するにはどうすればよいですか?

参考までに、TFSBuild.projでソリューションを構築します。

<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
          <ItemGroup>
            <SolutionToBuild Include="/some folder/some solution.sln" />
            <ConfigurationToBuild Include="Debug|Any CPU">
               <FlavorToBuild>Debug</FlavorToBuild>
               <PlatformToBuild>Any CPU</PlatformToBuild>
             </ConfigurationToBuild>
          </ItemGroup>
</Project>

ビルドサーバーで、c:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ CodeAnalysisでコード分析のターゲットファイルへの参照を見つけましたが、ビルドサーバーのデフォルトの動作を変更したくありません(私がそうするときそれは働きますが)。たとえば、CodeAnalysisTreatWarningsAsErrorsの条件は、falseとして評価される必要があります。私の値と同じように、TFSBuild.projからは読み取られませんが、.csprojファイルから読み取られます。

ご不明な点がございましたら、お気軽にお問い合わせください。よろしくお願いいたします。

4

2 に答える 2

2

CODE_ANALYSISVS.Netで「ビルドでコード分析を有効にする(CODE_ANALYSIS定数を定義する)」がチェックされていても、CruiseControlがコンパイルシンボルを使用してコンパイルしないという同様の問題があると思います。

チェックされているかどうかは、CODE_ANALYSIS実際にはcsprojのコンパイルシンボルのリストに明示的に追加されていないように見えます([条件付きコンパイルシンボル]テキストボックスに表示されている場合でも)、<RunCodeAnalysis>true</RunCodeAnalysis>追加されるだけです。

VS.Netを介してコンパイルする場合、CODE_ANALYSISは自動的に追加されますが、CruiseControlが使用するMSBuildを使用する場合は追加されません。

最終的に、VS.Netで「条件付きコンパイルシンボル」を「CODE_ANALYSIS;MySymbol」から「MySymbol;CODE_ANALYSIS」に変更しました。それを行うとCODE_ANALYSIS、csprojにも表示されます。

于 2013-03-25T02:56:51.440 に答える
1

同様の問題が発生したことを覚えていますが、調査する時間がなかったため、execタスクを使用してFxCopを直接呼び出すことで回避しました。一部のプロパティの指定を省略して、ハイライトを示します。名前が明確であることを願っています。

出力dllのItemGroup、FilesToAnalyzeを作成し、次のような方法でFxCopにフィードしました。

<PropertyGroup>
      <FxCopErrorLinePattern>: error</FxCopErrorLinePattern>
      <FxCopCommand>"$(FxCopPath)" /gac /rule:"$(FxCopRules)" /ruleset:="$(FxCopRuleSet)"  @(FilesToAnalyze->'/file:"%(identity)"', ' ') /out:$(FullFxCopLog) /console | Find "$(FxCopErrorLinePattern)" > "$(FxCopLogFile)"</FxCopCommand>
</PropertyGroup>    

<Exec Command="$(FxCopCommand)"
      ContinueOnError="true">
  <Output TaskParameter="ExitCode" PropertyName="FxCopExitCode"/>
</Exec>

<ReadLinesFromFile File="$(FxCopLogFile)">
    <Output TaskParameter="Lines" ItemName="AllErrorLines"/>
</ReadLinesFromFile>

次に、extensionpackタスクを使用して、出力のエラー数を判別できます。

<MSBuild.ExtensionPack.Framework.MsBuildHelper TaskAction="GetItemCount" InputItems1="@(AllErrorLines)">
    <Output TaskParameter="ItemCount" PropertyName="FxErrorCount"/>
</MSBuild.ExtensionPack.Framework.MsBuildHelper>

エラーごとに失敗するビルドステップを作成します。

<BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
        BuildUri="$(BuildUri)"
        Id="$(FxCopStep)"
        Status="Failed"
        Message="FxCop Failed: $(FxErrorCount) errors."/>

<BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
                BuildUri="$(BuildUri)"
                Status="Failed"
                Message="%(AllErrorLines.Identity)"/>

このようにビルドサーバーでコード分析を行うことで、各プロジェクトを個別に構成する必要もなくなりました。これらすべてを個別の.targetsファイルに分離したため、ソリューションにコード分析を追加するには、そのファイルをインポートし、適切なプロパティを設定して動作を調整する必要がありました。

于 2012-12-04T06:57:30.363 に答える