c# - TFS API 获取删除文件 - 更新到新版本后的不同行为(从 14xx 到 16xx)

标签 c# .net api tfs azure-devops

我已将 Microsoft.TeamFoundation.VersionControl.Client.dll 从版本 14 (.98.25331.0) 升级到 16 (.149.28804.2 ) 并注意到一个奇怪的行为。我不确定这是正常情况还是错误。

考虑这种情况:

用户有一个映射到本地路径的服务器工作区。

用户对文件进行了 checkout ,意识到这不是故意的并执行了撤消。然后,他将该文件与另一个文件进行比较(这通过在 appdata 上创建一个新工作文件夹、将其映射并将文件获取到该位置来实现)。这以前工作正常,本地路径上的初始文件没有被触及并保留在那里。

升级到版本 16(.149.28804.2) 后,本地文件夹中的“旧”文件将在将文件移至新的临时路径后立即删除强>.

这是故意的还是错误?

我不确定代码在这种情况下是否有帮助,无论如何我都会提供

workSpace.Undo(undoFiles, RecursionType.OneLevel, false);

Related MSDN documentation用于撤消。

workSpace.Get(getFiles, VersionSpec.Latest, RecursionType.OneLevel, GetOptions.None);

Related MSDN documentation获取。

有什么想法吗?


编辑:

经过一些调查,这似乎是有意为之。使用2017 VS的tf.exe,出现replacing ... (moved from xx) 行。似乎它注定是那样的。不过,这并没有真正帮助我。


编辑 2:

我找到了问题的原因(或者更确切地说是预期的行为)。 在Microsoft.TeamFoundation.VersionControl.Client.dll中有这段代码

if (asyncGetFileState.m_existingLocalExists && asyncGetFileState.m_action.CurrentLocalItem != null && !FileSpec.Equals(asyncGetFileState.m_action.CurrentLocalItem, asyncGetFileState.m_action.TargetLocalItem))
{   
    asyncGetFileState.m_client.DeleteSource(asyncGetFileState.m_action, asyncGetFileState.m_existingLocalAttrs);
}

注意属性 CurrentLocalItemTargetLocalItem。 由于 CurrentLocalItem 仍然指的是原始位置TargetLocalItem 指的是临时文件夹,正在删除原始位置中的文件。 两个版本都会发生这种情况,我们似乎从未在以前的版本中注意到它。

但是,可能有一种方法可以更新缓存,使 CurrentLocalItem 也指向 TargetLocalItem 所指的相同位置,这样我的原始文件就不会删除。我会尽快调查。

最佳答案

按照建议,我会将我的最终编辑作为答案。

我找到了问题的原因(或者更确切地说是预期的行为)。 在Microsoft.TeamFoundation.VersionControl.Client.dll中有这段代码

if (asyncGetFileState.m_existingLocalExists && asyncGetFileState.m_action.CurrentLocalItem != null && !FileSpec.Equals(asyncGetFileState.m_action.CurrentLocalItem, asyncGetFileState.m_action.TargetLocalItem))
{   
    asyncGetFileState.m_client.DeleteSource(asyncGetFileState.m_action, asyncGetFileState.m_existingLocalAttrs);
}

注意属性 CurrentLocalItemTargetLocalItem。 由于 CurrentLocalItem 仍然指的是原始位置TargetLocalItem 指的是临时文件夹,正在删除原始位置中的文件。 两个 版本都会发生这种情况,似乎我们从未在以前的版本中注意到它。

一个可行的解决方案是重命名原始文件并在将其获取到临时文件夹后恢复名称。

但是,可能有一种方法可以更新缓存,使 CurrentLocalItem 也指向 TargetLocalItem 所指的相同位置,这样我的原始文件就不会删除。如果我能找到更好的解决方案,我会调查并更新我的答案。

关于c# - TFS API 获取删除文件 - 更新到新版本后的不同行为(从 14xx 到 16xx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58391415/

相关文章:

php - 这是什么代码?

c# - 在 C# 中从视频 URL 创建缩略图

c# - 如何在wpf中自动调整富文本框的大小?

c# - 如何通过 Active Directory 中的用户电子邮件获取公司信息?

c# - WPF 网。 3.5 C# 对象引用未设置为对象的实例。我该如何解决?

.net - 如何使用 Try 和 Catch 在 VB.Net 中重试操作?

python - 使用 rauth 连接到 LinkedIn API

C++ 适当的指针成员初始化

c# - 在没有超时的情况下在 AspNetCore 应用程序上运行进程

c# - WCF 服务调用失败...我的配置文件有什么问题?