我已将 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);
有什么想法吗?
编辑:
经过一些调查,这似乎是有意为之。使用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);
}
注意属性 CurrentLocalItem
和 TargetLocalItem
。
由于 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);
}
注意属性 CurrentLocalItem
和 TargetLocalItem
。
由于 CurrentLocalItem
仍然指的是原始位置 而 TargetLocalItem
指的是临时文件夹,正在删除原始位置中的文件。 两个 版本都会发生这种情况,似乎我们从未在以前的版本中注意到它。
一个可行的解决方案是重命名原始文件并在将其获取到临时文件夹后恢复名称。
但是,可能有一种方法可以更新缓存,使 CurrentLocalItem
也指向 TargetLocalItem
所指的相同位置,这样我的原始文件就不会删除。如果我能找到更好的解决方案,我会调查并更新我的答案。
关于c# - TFS API 获取删除文件 - 更新到新版本后的不同行为(从 14xx 到 16xx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58391415/