2017-01-18 14 views
0

でローカルワークスペースの下にファイルをロックする方法workspace.PendEditで1つのファイルを排他ロックLockLevel.CheckOutでチェックアウトしようとしています。次の関数は成功します(エラーはありません)が、TFS内のファイルには何の影響も与えていないようです(チェックアウトされておらず、ロックされていません)。TFS 2012 API

public static void Lock(string filePath) 
    { 
     var workspace = GetWorkspace(filePath); 
     workspace.PendEdit(new[] {filePath}, RecursionType.None, null, LockLevel.CheckOut); 
    } 

これは私のTFSワークスペースがローカルであることと関係していると思われます。しかし、Visual Studio 2015は、[Source Control Explorer]->[Right Click Selected File]->[Advanced]->[Lock]を介してファイルにロックを設定することに問題はないようです。 VSがやっていることとは何か違うのですか?何か不足していますか?

答えて

0

は多くの試行錯誤の後、私はこのようなNonFatalErrorのイベントハンドラを実装することになりました私の排他的なチェックアウトと。それが判明したように、TFSは、次のエラーでサイレントを失敗した

TF400022: The item $/Fake/Server/Path/project.config cannot be locked for checkout in workspace MYWORKSPACE;Dan Lastname. Checkout locks are not supported in local workspaces. 

溶液をLockLevel.CheckinLockLevel.CheckOutからLockLevelを変更することでした。その少し異なるタイプのロックですが、私のニーズに十分であり、それはローカルのワークスペースでファイルをロックしようとしたときに使用しているロックのタイプです。だからここに私の元の機能は、すべての違いを作ったLockLevelの小さな変化である。まだTFSのファイルに何もしません

public static void Lock(string filePath) 
{ 
    var workspace = GetWorkspace(filePath); 
    workspace.PendEdit(new[] {filePath}, RecursionType.None, null, LockLevel.Checkin); 
} 
0

RecursionType.FullではなくRecursionType.Noneを使用する必要があります。

workspace.PendEdit(new[] {filePath}, RecursionType.Full, null, LockLevel.CheckOut); 

PendEdit()メソッドは、指定したfilePathに対してチェックアウト/ロックされたファイルの数を返します。 RecursionType.Fullは、パスの最後の子に再帰します。

更新: APIプロジェクト用にこのTFSナゲットパッケージ(https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/)をインストールして、この問題がまだ存在するかどうか試してみてください。それがうまくいけば、使用しているVSのバージョンにかかわらず、この問題は表示されません。イベントハンドラがversionControlServer.NonFatalError += VersionControlServer_NonFatalError;経由versionControlServerオブジェクトにフックアップされたら、私は何が起こっていたか見ることができました

private static void VersionControlServer_NonFatalError(object sender, ExceptionEventArgs e) 
    { 
     if (e.Failure != null && e.Failure.Severity == SeverityType.Error) 
      throw new ApplicationException("An internal TFS error occurred. See failure message for details:\r\n"+e.Failure.Message); 
    } 

+0

- それはロック解除されたままではなく、チェックアウト「int型のカウント= workspace.PendEditを使用しよう@Dan – Dan

+0

(RecursionTypeの設定が結果に影響を及ぼさなかった)([新しいです] {filePath}、RecursionType.Full、null、LockLevel.CheckOut); "カウントが0の場合は? "filePath"の下にファイル項目があることを確認してください。 filePathは、ワークスペースのローカルパスです。 –

+0

カウントは0です。filePathは正しいです。 PendEditはエラーを報告しません(私は少なくとも見ることができません)。 – Dan

関連する問題