Спасибо, Скотт,
Через некоторое время я нашел хороший способ справиться с этим.
В основном я создал задачу, которая получает текущие наборы изменений, связанные со сборкой (пункт 1 моего вопроса не является проблемой), а затем перебирает их в поисках файлов .sql. После того, как у меня есть список из них, я могу создать сценарий изменения или выполнить их для целевой базы данных.
Код выглядит примерно так:
TeamFoundationServer tfs = new TeamFoundationServer(TfsServerUrl);
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
var buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
IBuildDetail build = buildServer.GetBuild(
new Uri(BuildUri)
, null
, QueryOptions.All
);
build.RefreshAllDetails();
var changesets = InformationNodeConverters.GetAssociatedChangesets(build);
foreach (var changesetSummary in changesets)
{
Changeset changeSet = vcs.GetChangeset(changesetSummary.ChangesetId);
sqlFilePaths.AddRange(
ProcessChangeSet(changeSet)
);
}
и код внутри ProcessChangeSet выглядит как
List<string> sqlFilePaths = new List<string>();
foreach (Change change in changeSet.Changes)
{
if ((change.Item.ItemType == ItemType.File)
&& (change.Item.ServerItem.EndsWith(".sql", StringComparison.OrdinalIgnoreCase))
)
{
sqlFilePaths.Add(
sqlPath
);
}
}
return sqlFilePathes;
Но если кто-то захочет, я с удовольствием предоставлю им полный код. Обеспечивает синхронизацию хранимых процедур в системе. Это только оставляет изменения схемы для управления вручную в моей базе данных, что я с радостью сделаю.