Visual Studio 2017多实例连接不同TFS解决方案的排除变更异常
问题原因及解决办法
为什么会出现这个现象?
这其实是TFS工作区的监控范围和VS实例的工作区关联逻辑导致的:
- 你当前的两个VS实例大概率共用了同一个全局TFS工作区,而且这个工作区的映射根目录是
\Projects(包含了Project1和Project2)。TFS的全局工作区会监控整个映射路径下的所有文件变更,所以不管你在Project1还是Project2里加文件,整个工作区都会检测到这个未被纳入项目的新文件,从而在所有关联该工作区的VS实例的「排除的变更」里显示。 - 当你通过VS直接添加文件时,VS会自动把文件加入对应解决方案的项目文件(比如
.csproj),同时TFS会将这个变更和该解决方案的上下文绑定,所以只会在对应的VS实例里显示,不会扩散到另一个实例。
解决办法
这里给你三个实用的方案,按需选择:
1. 为每个解决方案创建独立的本地工作区(推荐)
这是最彻底的解决方式,让两个项目完全隔离:
- 打开VS的「团队资源管理器」,找到「工作区」选项,点击「管理工作区」。
- 点击「新建」,创建一个只针对
\Projects\Project1的工作区:设置工作区名称(比如Workspace_Project1),把服务器路径\Projects\Project1映射到本地的独立路径(比如C:\TFS_Workspaces\Project1)。 - 同理,再创建一个针对
\Projects\Project2的独立工作区。 - 之后分别用对应的工作区打开两个解决方案,这样各自的工作区只监控自己的项目路径,资源管理器加文件只会在对应VS实例中显示。
2. 调整现有工作区的映射范围
如果不想新建工作区,可以修改当前工作区的映射,缩小监控范围:
- 在「管理工作区」里找到当前使用的工作区,点击「编辑」。
- 删除原来的
\Projects根映射,分别添加\Projects\Project1和\Projects\Project2的单独映射,但要注意:给每个VS实例指定不同的工作区(或者每次切换解决方案时切换工作区)。不过这种方式不如第一种彻底,偶尔还是可能出现交叉显示的情况。
3. 添加文件后手动关联到对应项目
如果坚持使用同一个工作区,那每次通过资源管理器加完文件后,在对应的VS实例里操作:
- 右键点击解决方案或项目,选择「添加」→「现有项」,选中刚添加的文件。
- 这样TFS会把这个文件纳入该项目的变更上下文,另一个VS实例的「排除的变更」里就会自动移除这个条目了。
内容的提问来源于stack exchange,提问作者Brian Leeming
相关产品推荐
相关产品推荐

