現在、TFS 実装のビルド定義に取り組んでいます。この最後の部分が機能しないことを除いて、ほとんどすべてが機能しています。以下は、私が現在実装している CodeActivity クラスです。
ワークフロー図では、デフォルトassociatedChangesets
変数を InArgument として利用しています。
次のコードは機能し、フォルダーを作成しますDatabase
が、AssociatedChangesets
アイテムが含まれていないようです。
public sealed class CreateDatabaseDrop : CodeActivity
{
public InArgument<Workspace> Workspace { get; set; }
public InArgument<string> DropLocation { get; set; }
public InArgument<IList<Changeset>> AssociatedChangesets { get; set; }
// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
Workspace workspace;
string dropLocation;
IList<Changeset> associatedChangesets;
protected override void Execute(CodeActivityContext context)
{
List<string> filesChanged = new List<string>();
workspace = context.GetValue(this.Workspace);
dropLocation = context.GetValue(this.DropLocation);
associatedChangesets = context.GetValue(this.AssociatedChangesets);
if (!Directory.Exists(dropLocation + @"\database\"))
Directory.CreateDirectory(dropLocation + @"\database\");
foreach (var c in associatedChangesets.OrderBy(x => x.CreationDate))
{
foreach (var change in c.Changes)
{
context.WriteBuildMessage(change.Item.ServerItem);
}
foreach (var change in c.Changes.Where(x => x.Item.ItemType == ItemType.File && x.Item.ServerItem.Split('/').Last().ToLower().Contains(".sql")))
{
string fileName = change.Item.ServerItem.Split('/').Last();
context.WriteBuildMessage(string.Format("SQL File Found: {0}", change.Item.ServerItem));
WorkingFolder wf = workspace.GetWorkingFolderForServerItem(change.Item.ServerItem);
string copyFrom = Path.Combine(wf.LocalItem, fileName),
copyTo = dropLocation + @"\database\" + fileName;
context.WriteBuildMessage(string.Format("Copying {0} to {1}", fileName, copyTo));
File.Copy(copyFrom, copyTo, true);
}
}
}
最後のビルドが完了してからのすべての SQL 変更を取得する方法を理解するのを手伝ってくれる人はいますか?