1

TFS 2012 には、いくつかのプロジェクトを含むソリューションがあります。ビルド サーバーで継続的インテグレーション ビルドをセットアップし、Clean Workspace = None を設定しました。TFS バージョン管理テンプレート 2.0 を使用して、AssemblyFileVersion と AssemblyVersions を更新しています。

ビルドが実行されると、一部のプロジェクトのコードに変更が加えられていない場合でも、各プロジェクトの AssemblyInfo.cs ファイルが新しいバージョン番号で更新されます。理想的には、プロジェクトに変更があった場合にのみバージョンを変更する必要があります。

各プロジェクトを個別にビルドすることを検討していましたが、ソリューションを簡単にビルドできるようにしたいと考えています。Clean Workspace = None はプロジェクトが更新されないようにする必要があることを読みましたが、ビルド後にすべての dll のタイムスタンプが変更されたように表示されているため、それが起こっているようには見えません。

私はビルド プロセスをセットアップするのが初めてなので、単純に間違っていることを期待しています。どんな提案でも大歓迎です。

更新: 提案されたリンクを確認した後、ビルド中に問題を引き起こしている可能性のある 2 つのことを行っているようです: 1) プロジェクトの 1 つで「AfterBuild」ステップで行われる web.config ファイルの変換と 2)ワークフローを開いて変更されたファイルを確認する方法を確認せずに、「TFS バージョニング」テンプレートのバージョン番号インクリメント機能を使用します。これらの両方を削除して、何が起こるかを確認します。

4

1 に答える 1

0

これは良い質問であり、可能です。TFS API を使用する PowerShell スクリプトを実行して、変更されたファイルを特定します

変更セットとシェルフセットも取得する必要がありますが、これらを取得すると、次のように必要な情報を取得できます。

function Get-ChangesetChanges()
{
    [CmdletBinding()]
    param ([Parameter(Mandatory=$true)][string]$Changeset,[Parameter(Mandatory=$true)][string]$TFSServer)
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.VersionControl.Client')
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Client')
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($TFSServer) 
$vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer])  
$vcsChanges = $vcs.GetChangeset($changeset).Changes;
$changes = @();

foreach ($change in $vcsChanges)
{   
    $changes += $change.Item.ServerItem;
}

$changes;

}

于 2015-02-05T19:05:27.017 に答える