1

C#コードを使用してファイルをチェックアウトするのが好きですが、常にTF14098アクセス拒否例外が発生します。TFS管理者は、チェックアウト/編集のアクセス許可があり、VisualStudioとtf.exeを使用して、ファイルをチェックアウトするのに問題がないことを確認します。

これは私の現在のC#コードです:

            const string tfsServer = @"http://MyServer:8080/tfs";
        const string fileName = @"$/MyFile.xaml";
        const string workspaceName = "MyWorkspace";

        using (TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer)))        
        {               
            if (tfs != null)
            {
                WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fileName);
                if (null != workspaceInfo)
                {
                    var vcs = tfs.GetService<VersionControlServer>();   
                    Workspace workspace = workspaceInfo.GetWorkspace(tfs);                                  
                    if(workspace == null){

                        workspace = vcs.GetWorkspace(workspaceName, vcs.AuthorizedUser);
                    }                   

                    vcs.NonFatalError +=    VersionControlOnNonFatalError;
                    vcs.Getting += OnGetting;
                    vcs.BeforeCheckinPendingChange += OnBeforeCheckinPendingChange;
                    vcs.NewPendingChange += OnNewPendingChange;

                    if (workspace != null)
                    {
                        workspace.PendEdit(fileName);
                    }                       
                }
            }
        }

結果は常に次のようになります。

致命的ではない失敗:TF14098:アクセスが拒否されました:ユーザーMeには$/MyFile.xamlのPendChangeアクセス許可が必要です。

このエラーについて多くの調査を行った後、Dos-Boxを介してアクセス許可を確認しようとし、次のコマンドラインを実行しました。

tf checkout $/MyFile.xaml

問題なくファイルのチェックアウトが行われます。(私がファイルが抵抗するディレクトリにいる場合)

誰かが問題が何であるかについての考えを持っていますか?私のコード(VisualStudio2012で作成および実行されたアプリケーション)とコマンドラインtfチェックアウトの違いは何ですか?

ヒントとヒントをありがとう!パトリック

4

1 に答える 1

1

コードの問題はTfsTeamProjectCollection、コレクション名を設定したことがないため、がパスに適合しないことです(@ "http:// MyServer:8080 / tfs / DefaultCollection"のようにする必要があります)。APIを使用してチェックアウトを行ったことはありませんが、次のようにチェックインを開始しました。

WorkspaceInfo wi = Workstation.Current.GetLocalWorkspaceInfo(Environment.CurrentDirectory);
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(wi.ServerUri);

VersionControlServer versionControlServer = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
Workspace workSpace = versionControlServer.GetWorkspace(wi);

ご覧のとおり、独立した設定ではなく、ワークスペースを使用してTeamCollectionを検索しています。このようにするとVersionControlServer、チェックアウトを行う権利が得られます。

tf.exeツールを使用する場合の違いは、ローカルワークスペースで実行するため、ツールはTFSでどのアイテムにリンクされているかとどのコレクションにリンクされているかを認識していることです。

于 2013-01-24T07:50:33.207 に答える