4


そのため、一連のファイルを処理して生成し、それらをローカル ディレクトリに出力してから、既存のファイルを更新する必要があるか、新しいファイルを TFS (Team Foundation Server) プロジェクトに追加する必要があるかを判断する .NET アプリがあります。
ローカル マシンに 1 つのワークスペースがあり、この特定のマシンから作業した他のコーディング プロジェクトである 10 個の異なる作業フォルダーがあります。私の問題は、ファイルが既に TFS プロジェクトに存在し、更新が必要かどうか、または新しいファイルとしてプロジェクトに追加する必要があるかどうかを確認するときに発生します。
スニペット:

static string TFSProject = @"$/SQLScripts/";
static WorkspaceInfo wsInfo;
静的 VersionControlServer versionControl;
static string argPath = "E:\\SQLScripts\\";

wsInfo = Workstation.Current.GetLocalWorkspaceInfo(argPath);
TeamFoundationServer tfs = new TeamFoundationServer(wsInfo.ServerUri.AbsoluteUri);
versionControl = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

ワークスペース ワークスペース = versionControl.GetWorkspace(wsInfo);
ワークスペース.GetLocalItemForServerItem(TFSProject);


この時点で、ファイルが存在するかどうかを確認し、次の 2 つのいずれかを行います。ファイルが存在する場合は、そのファイルに編集用のマークを付けてから、ファイルをローカル ディレクトリに書き出します。そうでない場合は、最初にファイルのスクリプトを作成してから、ファイルをワークスペースに追加します。「変更を追跡する」ための SAS70 要件としてこれを行っているため、物理ファイルが生成しているものと同一であるかどうかは気

にしません

scriptoutthefile(ファイル名);

または存在しない場合は、
ファイル名 (ファイル名) をスクリプト化します。
ワークスペース.PendAdd(ファイル名、真);

わかりました、問題に到達するためのすべてです。PROJECT に対して保留中の変更を確認すると、ワークスペース内のローカル マシンにあるすべてのプロジェクトの保留中の変更がすべて取得されます。

// 保留中の変更を表示します。
PendingChange[] pendingChanges = ワークスペース.GetPendingChanges();
foreach (pendingChanges 内の PendingChange pendingChange)
{
    何かを...
}

ワークスペースをworkspace.GetLocalItemForServerItem(TFSProject)に設定すると、その特定の作業フォルダーのオブジェクトのみが得られると思いました。

ワークスペース オブジェクトが特定の作業フォルダーのみを処理するように強制する方法はありますか?

それは意味がありましたか?前もって感謝します...

4

3 に答える 3

5

LINQ を使用すると、特定のフォルダーの保留中の変更を取得できます

PendingChange[] pendingChanges = workspace
    .GetPendingChanges()
    .Where(x => x.LocalOrServerFolder.Contains(argPath))
    .ToArray();
于 2010-08-10T13:17:15.037 に答える
2

ワークスペース キャッシュを更新する別の方法を次に示します。

tf ワークスペース /s: http://SomeTFSServer:8080/

また、Workspace には UpdateWorkspaceInfoCache(..) というメソッドがあり、同じことをしているようです。ただし、これはテストしていません。

于 2009-05-27T18:14:33.183 に答える
1

わかりました。マシンのTFSワークスペースキャッシュが破損していることがわかりました。解決策は次のとおりです(コマンドプロンプトから):

SET AppDataTF =%USERPROFILE%\ Local Settings \ Application Data \ Microsoft \ Team Foundation
SET AppDataVS =%APPDATA%\ Microsoft \ VisualStudio
IF EXIST "%AppDataTF%\ 1.0 \ Cache" rd / s / q "%AppDataTF%\ 1.0 \ Cache"> NUL
IF EXIST "%AppDataTF%\ 2.0 \ Cache" rd / s / q "%AppDataTF%\ 2.0 \ Cache"> NUL
IF EXIST "%AppDataVS%\ 8.0 \ Team Explorer" rd / s / q "%AppDataVS%\ 8.0 \ Team Explorer"> NUL
IF EXIST "%AppDataVS%\ 9.0 \ Team Explorer" rd / s / q "%AppDataVS%\ 9.0 \ Team Explorer"> NUL

問題の他の部分は、同じワークスペースにプロジェクトフォルダーを配置することにより、他のプロジェクトから保留中のすべての変更を取り込むことです。SQLScriptsプロジェクトとローカルフォルダーのみを使用してセカンダリワークスペースを作成しましたが、すべてが魅力のように機能します。

多分誰か他の人がこれが役に立つと思うでしょう...

于 2009-03-31T20:31:19.273 に答える