Microsoft.TeamFoundation.VersionControl.Client.Workspace.PendAdd
何らかの理由で、TFS API から PendAdd メソッドを呼び出すたびに、例外なく実行されますが、ワークスペースに追加されたファイルをマークすることはできません。ただし、PendEdit の呼び出しは一貫して期待どおりに機能します。使用されているアカウントには、TFS 内に追加する権限があり、問題のファイルに対するフル コントロールの Windows 権限があることを確認しました。
何か案は?
私のコード (デバッグ用に、PendAdd メソッドへの入力で 4 つのバリエーションを試しています):
public bool AddFile( string filePath, out string status, bool isRecursive = false )
{
Workspace workspace = GetWorkspace( out status );
if( workspace == null )
{
return false;
}
workspace.PendAdd( filePath, isRecursive );
status = "Success";
return true;
}
public bool CheckOutFile( string filePath, out string status )
{
Workspace workspace = GetWorkspace( out status );
if( workspace == null )
{
return false;
}
workspace.PendEdit( filePath );
status = "Success";
return true;
}
...
string status;
// $/Solution/.../foo.cs (non-recursive)
if( TFS.AddFile("$/Solution" + Regex.Split(target, "Solution")[1].Replace('\\', '/'), out status) == false )
{
throw new Exception( "TFS Add failed: " + status );
}
// $/Solution/.../ (recursive)
if( TFS.AddFile("$/Solution" + Regex.Split(target.Substring(0, target.LastIndexOf('\\')), "Solution")[1].Replace('\\', '/'), out status, true) == false )
{
throw new Exception( "TFS Add failed: " + status );
}
// Calls PendEdit with C:\TFS\Solution\...\foo.cs; this works
if( TFS.CheckOutFile(target, out status) == false )
{
throw new Exception( "TFS Checkout failed: " + status );
}
// C:\TFS\Solution\...\foo.cs (non-recursive)
if( TFS.AddFile(target, out status) == false )
{
throw new Exception( "TFS Add failed: " + status );
}
// C:\TFS\Solution\...\ (recursive)
if( TFS.AddFile(target.Substring(0, target.LastIndexOf('\\')), out status, true) == false )
{
throw new Exception( "TFS Add failed: " + status );
}
...
private Workspace GetWorkspace( out string status )
{
Workspace[] workspaces = _versionControlServer.QueryWorkspaces( null, _versionControlServer.AuthorizedUser, Environment.MachineName );
if( workspaces.Length != 1 )
{
status = "You must have exactly 1 local workspace to promote code.";
return null;
}
else
{
status = "You have exactly 1 local workspace.";
}
return workspaces[0];
}