31

私のマシンの 1 つで、GetLocalWorkspaceInfo呼び出しから null の戻り値を取得します。この単純なプログラムでも失敗する問題を特定しました。

namespace WorkstationTest
{
    using Microsoft.TeamFoundation.VersionControl.Client;

    class Program
    {
        static void Main()
        {
            string workspaceLocalPath = @"C:\Dev";
            var info = Workstation.Current
                          .GetLocalWorkspaceInfo(workspaceLocalPath);

            // info is always null here
        }
    }
}

私がすでにチェックしたこと:

  • まったく同じコードが、他のマシンでも正常に機能します。

  • にワークスペースがあることを確認しましたC:\Dev

    ワークスペースのスクリーンショット

  • 新しいワークスペースを別のディレクトリに作成workspaceLocalPathし、コード内の変数を一致するように変更しました。

  • 戻り値が null になると記載されているドキュメントを参照しましたif the path is not in a workspace。上の画像から、パスはワークスペース内にあるはずです。

それでも、すべてがこれが機能することを示唆しているようです。不足している可能性のあるものはありますか?

4

8 に答える 8

9

これが古い投稿であることは承知していますが、VersionControlServer.QueryWorkspaces を使用して、ユーザーのマシン上のユーザーのすべてのワークスペースをクエリするという回避策を共有したいと思います。

private static Workspace FindWorkspaceByPath(TfsTeamProjectCollection tfs, string workspacePath)
{ 
    VersionControlServer versionControl = tfs.GetService<VersionControlServer>();

    WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(workspacePath);

    if (workspaceInfo != null)
    {
        return versionControl.GetWorkspace(workspaceInfo);
    }

    // No Workspace found using method 1, try to query all workspaces the user has on this machine.
    Workspace[] workspaces = versionControl.QueryWorkspaces(null, Environment.UserName, Environment.MachineName);
    foreach (Workspace w in workspaces)
    {
        foreach (WorkingFolder f in w.Folders)
        {
            if (f.LocalItem.Equals(workspacePath))
            {
                return w;
            }
        }
    }

    throw new Exception(String.Format("TFS Workspace cannot be determined for {0}.", workspacePath));
}
于 2016-04-21T03:22:28.223 に答える