11

ソリューション内の特定のプロジェクトのビルドを禁止したい (知っておく必要がある場合は、コミット ビルド フィードバックの速度を最適化するために、TeamCity ビルド構成内)。

私はソリューション構成メカニズムを認識しています.slnが、スイッチをオフにしたいもののすべての順列で多くのファイルを強制する必要はありません。「コミット ビルドを実行している場合、最終的なインストーラのパッケージングは​​実行したくない」と言いたい、規則に基づくルールがあります。(そして、それを別のソリューションに分割したくありません)。

.slnファイル内または.xml で.proj作成されたファイル内での検索と置換を含むソリューションは使用したくありません[MsBuildEmitSolution][1]すぐに使用できるソリューションと、このわずかに関連する質問をカバーする質問がここにあることを認識しています。

私はMSBuild/v:diagが言っているのを見ます:

 2>Target "Build" in file "Z.sln.metaproj" from project "Z.sln" (entry point):
   Using "MSBuild" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
   Task "MSBuild"
     Global Properties:
       BuildingSolutionFile=true
         CurrentSolutionConfigurationContents=<SolutionConfiguration>
   <ProjectConfiguration Project="{C83D035D-169B-4023-9BEE-1790C9FE22AB}" AbsolutePath="X.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
   <ProjectConfiguration Project="{15E7887D-F1DB-4D85-8454-E4EF5CBDE6D5}" AbsolutePath="Y.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
 </SolutionConfiguration>

質問は次のとおりです。

上記のプロジェクト Yに変更する効果を得るために、XPath の置換などを行うためのきちんとした方法はありますかBuildProjectInSolution="True"BuildProjectInSolution="False"

.ccprojそれができない場合、 (Azure 1.4 パッケージ) または(一般的なプロジェクト) ファイル内で実行できる比較的簡単な編集で、コマンドラインソリューション ビルド.csproj内で有効になっているプロジェクトの効果 (依存プロジェクトのトリガーを含む) を発生させることができますか?msbuild Z.sln無効になる?

4

3 に答える 3

4

ビルドする特定のプロジェクトをパラメーターとして MSBuild にいつでも渡すことができます。

MSBuild コマンド ラインは次のようになります。

MSBuild /t:<Project Name>:Rebuild;<Another Project Name>:Rebuild

TeamCity では<Project Name>:<Target Action>、MSBuild ランナーのターゲット フィールドに入力します。

于 2011-05-12T15:03:52.687 に答える
3

それがきちんとしたものであるかどうかはわかりませんが、ファイルをCustomAfterMicrosoftCommonTargetsインポートしてプロパティをオーバーライドし、独自のカスタム ビルド タスクを指すように設定できます。基本的に、msbuild を設定すると、以下を含む msbuild ファイルがインポートされます。msbuildBuildDependsOnCustomAfterMicrosoftCommonTargets

<PropertyGroup>
    <OldBuildDependsOn>$(BuildDependsOn)</OldBuildDependsOn>
    <BuildDependsOn>MyBuild</BuildDependsOn>
</PropertyGroup>

<Target Name="OldBuild" DependsOnTargets="$(OldBuildDependsOn)" />

<Target Name="MyBuild">
    <CallTarget Targets="OldBuild" Condition="<IfIWantThis>" /> 
</Target>

編集

次のターゲットを使用して、およびプロパティMyBuildとして渡される正規表現に基づいてプロジェクトを含める/除外することができます。(複雑な正規表現が必要な場合は、MSBuild の特殊文字のエスケープに違反する可能性がありますが、これは単純な照合には十分に機能します)IncludeInBuildExcludeFromBuild

> msbuild /p:ExcludeFromBuild="テスト|インストール|Azure"

<Target Name="MyBuild">
    <CallTarget Targets="OldBuild" Condition="('$(IncludeInBuild)'=='' OR
    '$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath),
    $(IncludeInBuild), 
    System.Text.RegularExpressions.RegexOptions.IgnoreCase))'=='True') AND 
    ('$(ExcludeFromBuild)'=='' OR 
    '$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath), 
    $(ExcludeFromBuild),  
    System.Text.RegularExpressions.RegexOptions.IgnoreCase))'=='False')" /> 
</Target>
于 2013-09-19T17:06:47.203 に答える