如何使用TFS扩展Visual Studio以覆盖Get命令

本文关键字:覆盖 Get 命令 Studio Visual 何使用 TFS 扩展 | 更新日期: 2023-09-27 18:05:48

我正在进行从Accurev到TFS的转换,并且由于Accurev使用符号链接而被阻止,TFS无法使用该链接。我试过几种方法,但似乎都不起作用。

我想做的是在项目/分支中有一个文件,列出存储在源代码管理中的所有链接文件和文件夹。在每次获取操作中,我都希望读取此文件并链接中心文件中指定的文件夹和文件。但是,我找不到扩展get操作的方法。有人有在VS中扩展它的经验吗?

如何使用TFS扩展Visual Studio以覆盖Get命令

TFS没有提供扩展Get操作的方法。您可以很容易地创建一个自定义的powershell或批处理文件,用它来代替调用tf.exe,但由于Team Build和Visual Studio直接使用客户端对象模型调用TFS,您自己不会轻松做到这一点。

当然,最终一切皆有可能。您可以为Team build编写一个自定义生成操作,以替换标准的get操作,或者创建一个在标准的get操作完成后触发的操作。您可以编写一个vsix visual studio扩展,它取代了visual studio菜单中所有地方的标准Get操作,并获得了一个可以认为可行的东西。但我不建议这样做。这远远达不到标准,也远远不可持续。您将不得不取消Visual Studio中的许多默认行为(即签出已更改的文件,在将文件添加到项目文件中时将其添加到源代码管理等(。

SourceSafe过去也有这个功能(它被称为钉扎(,微软在创建TFVC时删除了它。他们现在建议您使用分支和合并来在多个项目中同步这些文件,确保源代码管理中的源代码结构与构建过程中磁盘上的相同。

也可以在项目文件中使用"作为链接添加"选项。这允许您将原始文件保留在其原始位置,但MsBuild会理解,在项目结构中,该文件实际上位于其他位置。或者将链接的文件打包到NuGet包中,并使用《使用NuGet的依赖关系管理》指南帮助您在构建过程中将文件放置在正确的位置。

最后,您可以使用工作区映射获得非常有创意的东西,许多人从来没有比映射$/project->$(SourceDir),但本质上工作空间映射就像您描述的文件。一种将源代码从源代码管理布局到磁盘的方法。你可以做:

$/Project/DEV/MyProject->$(SourceDir)'MyProject

$/Project/Shared/FilesToCopy->$(SourceDir)'Shared

您甚至可以在同一集合中添加来自其他项目的文件:

$/AnotherProject/Shared->$(SourceDir)'MoreShared

还有一点不是很多人知道,你可以布局单独的文件:

$/AnotherProject/CompanyAssemblyInfoItems.cs->$(SourceDir)'CompanyAssemblyInfoItems.cs

唯一不能做的就是将文件映射为已映射文件夹的子文件夹。在这种情况下,您可能需要让工作区映射来获取源,然后让包含在.csproj文件中的.targets文件来复制文件。