我正在嘗試的是在特定時間段內將所有.sql腳本推入到我的Test TFS團隊項目中,然後獲取鏈接以查看文件或下載複製到我的工作區的外部。所以我不需要想要得到最新的。這將使應用程序審查在特定時間段內執行的所有特定.sql更改,然後我將這些文件與分支環境進行比較,以確定哪些.sql複製並針對數據庫運行。使用Microsoft.TeamFoundation.VersionControl.Client從VersionSpec下載特定文件
我被困在獲取鏈接查看文件或下載文件。我預見到下載文件時遇到的問題是,我將下載數百個文件,並且最終會查看每個文件,以確定是否可以針對Test以外的其他環境重新運行.sql腳本。
public void GetChangesets(DataTable files,
bool excludeManualDatabaseFiles,
bool containsExcludedDerictoriesAndFiles)
{
// this gets collection-lvl services, in contrast to TfsConfigurationServer (server-lvl)
Uri serverUri = new Uri("<insert serverUri>");
var tpc = new TfsTeamProjectCollection(serverUri);
var vcs = tpc.GetService<VersionControlServer>();
DateTime testDate;
DateTime.TryParse("2017-07-01", out testDate);
VersionSpec fromDateVersion = new DateVersionSpec(testDate);
VersionSpec toDateVersion = new DateVersionSpec(DateTime.Now);
vcs.QueryRootBranchObjects(RecursionType.Full);
string teamProjectName = "<insert team project name>";
TeamProject[] tps = new TeamProject[]
{
vcs.GetTeamProject(teamProjectName)
};
DataTable returnedChangesetDetail = new DataTable();
// Step 1: THIS WORKS
returnedChangesetDetail.Columns.Add("FileName");
// Step 2: THIS DOES NOT WORK, this is currently empty !!!!!!
returnedChangesetDetail.Columns.Add("Uri");
foreach(TeamProject tp in tps)
{
IEnumerable changesets = vcs.QueryHistory(string.Concat("$/", tp.Name, "/Test/SQL"),
VersionSpec.Latest,
deletionId: 0,
recursion: RecursionType.Full,
user: null,
versionFrom: fromDateVersion,
versionTo: toDateVersion,
maxCount: int.MaxValue,
includeChanges: true,
slotMode: true);
foreach(Changeset changeset in changesets)
{
foreach(Change change in changeset.Changes)
{
string fileName = change.Item.ServerItem;
// I think this would be it but its not an accessible link, do I add/remove
// something to make this a Uri?
//var artifactUrui = change.Item.ArtifactUri;
// Step 1: WORKING
lstbxFileNames.Items.Add(fileName);
}
}
}
}
我希望評論解釋我在找什麼。這將是非開發人員的應用程序,但技術用戶可以查看其環境中所需的更改。他們需要審查大約100個文件,我想Uri會讓他們看到變化,然後選擇他們需要的文件,同時忽略步驟1中發現的變化,但確定不需要。
這種方法的服務器路徑是什麼?我原以爲它是Item.ServerItem,但似乎只是拋出無效的文件名異常。 – vfrank66
@ vfrank66它是ServerItem,對我來說工作正常。這個文件是否被刪除?這樣的代碼:DownloadFile(changeset.Item.ServerPath,changeset.Item.DeletionId,new DateVersionSpec(changeset.Item.CheckinDate),「D:\\ d \\ test.cs」);? –