重新建立 TFS 源代码控制绑定

68

我有大约十几个使用Visual Studio 2010版本控制在TFS存储库中的项目。最近,我去度假并将计算机的操作系统升级为Windows 7 64位。

我已重新安装了Visual Studio,并且可以连接到我的Team Foundation服务器并查看我的项目...只是我的绑定不正确。大多数时候,我的文件似乎都没有处于源代码控制下,但是在一些项目的根目录中,我的源代码控制绑定是正常的,但在项目根目录的子文件夹中却无法工作。

我尝试取消绑定、从源代码控制中打开以及删除该文件夹并获取最新版本,但这些都没有解决问题。

有什么想法可以恢复我的绑定吗?

更新

翻找后,我发现我的“无效”项目路径中似乎有一个额外的文件夹...我不知道它是怎么进去的,但这似乎影响了我的映射。


“invalid” 项目中的额外文件夹可能是在构建过程中创建的。它对 TFS 没有任何影响,除非您将其“添加”到您的项目中(这将同时将其“添加”到 TFS 中)。但需要注意的是:如果它确实是您项目的一部分,但不在 TFS 中,则需要将其添加到 TFS 中。 :) - Jesse Chisholm
2
我遇到了一个无效的源代码控制绑定问题。我发现我的项目中一直在创建一个名为$tf1的文件夹(日期为当前日期)。我已经有一个几个月前日期的$tf文件夹了。我尝试了解除绑定和重新绑定,但是问题没有得到解决。当我删除了$tf1,并将$tf重命名为$tf1时,我的绑定问题得到了解决!而且我的待处理更改也得以保留,正如我所需的那样。 - Anthony McGrath
10个回答

95

你说你已经尝试过解除绑定,但是你有没有试过重新绑定到源代码控制?

在Visual Studio中:

  • 打开出现问题的解决方案
  • 在“解决方案资源管理器”中选择解决方案
  • 选择文件->源代码控制->更改源代码控制
    Visual Studio 2013/2015: 文件->源代码控制->高级->更改源代码控制
  • 取消绑定所有已绑定但无法正常工作的项目。
  • 绑定所有未绑定的项目。

7
那个东西藏得真好啊...如果能在右键菜单里加个子菜单就太方便了... - Jedidja
我尝试过这样做,但当我点击“绑定”时,它弹出了SourceSafe对话框 - 但我需要将其绑定到TFS?有人能帮忙吗? - New Start
@NewStart 你应该把这个问题单独提出来问,但是我的第一想法是你的Tools->Options->Source Control插件设置成了SourceSafe而不是TFS。 - Joel Rondeau
1
请注意,在Visual Studio 2013中,它在 文件->源代码控制->高级->更改源代码控制 中。 - Matthew Lock
1
现在是2023年,你帮我找到了这个该死的绑定菜单。你太牛了,赞! - kexx
显示剩余4条评论

64

当您的绑定无效且解绑/绑定项目无法使用时,请尝试以下操作:

  1. 在“更改源代码控制”中取消绑定项目
  2. 在“解决方案资源管理器”中卸载项目(对于网站项目,“卸载项目”不在上下文菜单中,而在“网站”菜单中)
  3. 在“解决方案资源管理器”中重新加载项目

这对我总是有效的...


1
通过这种方式,TFS 将所有项目文件视为新添加到解决方案中的文件... - Shady
这对我在2020年起作用,现在“unload-project”已经出现在项目上下文菜单中。 - Matias Masso
我现在已经使用了这个答案两次,而且它有效。 - Slapout

10

我同意Joel的意见 - 通常解除绑定并重新绑定可以解决问题。

然而,如果重新绑定无法解决问题,您可以尝试直接编辑解决方案文件。我曾经看到过TFS绑定在解决方案文件中出现两次,并且由于某种原因似乎不准确 - 它们可能有错误的项目数量和设置为空但仍然列在解决方案文件中的项目。

当发生这种情况时(相当罕见),我会编辑文件并使它们成为应该是的样子。例如,我将删除第二个TFS绑定(GlobalSection(TeamFoundationVersionControl))或修复我看到的任何其他差异。然后重新加载解决方案,通常可以解决问题。不过,我肯定只会在万不得已时使用这个修复方法。


+1 需要手动编辑解决方案文件。希望您永远不必这样做,但以防万一要知道如何操作。 - Joel Rondeau
1
编辑 .sln 文件是我必须做的,但它起作用了!谢谢!! - Scott Fraley

3
我第一次在新安装的Visual Studio中打开一个已存在(且之前工作正常)的解决方案时,遇到了这个问题。
对我来说,解除绑定和重新绑定并没有解决问题。但是当我执行“获取最新版本”时,问题消失了。TFS显示文件存在冲突,我通过覆盖本地副本来解决了这些冲突。先前无效的绑定随后被显示为有效。

2
如果您仍在与TFS绑定无效状态作斗争,我在一个旧的(2005年)MSDN论坛https://social.msdn.microsoft.com/Forums/en-US/801b2490-776d-43a8-afef-adcedd78f02d/vsts-change-source-control-status-invalid?forum=tfsgeneral中发现了一个“宝石”:

这是由于绑定验证代码中使用的启发式算法导致的。该启发式算法对项目中的所有文件进行存在性检查,并且只有当源代码控制存储库中至少有一半的文件存在时才会返回“有效”。由于Web项目没有项目文件,因此位于Web项目文件夹中的任何文件都被认为是“项目的一部分”。显然,您有足够的未受控制的文件来使受控项目文件的百分比低于50%,从而导致无效状态。

换句话说,如果您有一个项目有许多未受控制的文件(特别是当您选择对于像node_modules或公共Web项目中的文件夹进行退选检入时),并且这些文件的数量占文件夹总数的50%以上,则无论您做什么,TFS绑定状态都是无效的。我可以通过删除正确数量的文件来验证此规则,直到绑定状态变为无效,并添加一个新文件(未受控制)即可获得无效状态。这种行为在VS 2019 6.3(Azure DevOps)中仍然存在。我不知道是否有一种方法可以禁用此启发式算法,但我非常确定这是一种虚假的无效状态,即TFS绑定实际上正在正常工作,这只是一个错误的消息。

多奇怪啊,这个方法解决了我的一个参考项目在VS 2019 16.9.3中的问题。我本来打算添加额外的文件(它们是不会自动添加的dll文件)。 - Jereme

2

我曾经遇到完全相同的问题,但是在Visual Studio 2017中。

解除绑定和重新绑定对我没有用。 最后,我通过解除解决方案中所有项目以及解决方案文件的绑定,然后对整个分支执行“获取最新版本”。这导致了一系列冲突:“本地已存在同名非版本控制文件或可写文件”。 通过选择“覆盖本地文件或文件夹选项”解决了这些错误。 最终,这为我解决了问题。


1

我想将这里的内容添加进来,因为我遇到了一个变体,并不得不自己找到解决方案。

简而言之:
1)确保项目未绑定。
2)手动选择项目的所有文件并将它们添加到源代码控制(而不是项目本身)- 这应该会在TFS下创建有问题的项目的根目录
3)在源代码控制资源管理器中,导航到有问题的项目的根目录,并手动将其.csproj文件添加到源代码控制中。

以下是我如何/为什么会到达这个地步的完整故事:

如果上面的所有答案都不起作用(ado空间的答案可能与此相关-但我没有完全理解:P)

我在我的解决方案中有9个项目,其中2个是纯资源项目。当我把整个解决方案导入TFS并映射到源代码控制时,它们始终保持无效绑定(只有这两个资源项目),无论我做什么都无法解决。最后,当我尝试手动将项目单个文件(.resx)添加到TFS时,TFS会警告文件被忽略,就像.exe一样,这是我添加-重新映射-修复解决方案时从未发生过的事情。警告允许我将文件添加到TFS,同时创建了完整的项目文件夹结构,而项目本身仍然保持无效绑定状态。但是从那里开始,我能够手动将每个.csproj添加到TFS中,神奇地,这些项目现在已经正确绑定并处于源代码控制下。我不确定为什么这些文件类型被忽略,可能是TFS或VS中的一些默认设置。

1

我看到这里有很多不同的解决方案。在过去,我曾遇到过类似的问题,通常解绑和重新绑定会解决。然而,最近我遇到了这个问题,并且似乎什么都不管用。

所以,我干脆在我的机器上删除了解决方案目录,然后从源代码中获取最新的版本。结果非常顺利。不过,我的所有更改都已经被提交了,所以我不必担心丢失任何东西。请根据实际情况自行斟酌。


1
当我重命名我的解决方案时,我也遇到了这个错误。我尝试了以上所有方法,但都没有解决这个问题。
对我来说真正的解决方案是使用新的解决方案名称编辑构建定义。
1. 点击 "我的生成" > 右键单击构建定义 > 编辑我的构建定义 > 进程 2. 注意 "1. 必需 > 要构建的解决方案" 引用了旧的解决方案名称。 3. 点击 "..." 旁边的 "要构建的解决方案" 4. 找到你的新解决方案。点击它。 5. 保存构建定义。 6. 重新构建。

1
这似乎是针对“TFS计划构建不再运行”的问题,而不是“我的解决方案/项目根本没有与TFS连接”的问题。 - Jesse Chisholm

0
请确保您的解决方案已经添加到源代码控制中: 文件 > 源代码控制 > 将解决方案添加到源代码控制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接