我正在进行从Accurev到TFS的转换,并且被Accurev使用符号链接阻止,而TFS无法使用这些符号链接。我尝试了几种方法,但它们似乎都无法工作。
我想要做的是在项目/分支中有一个文件,列出存储在源代码管理中的所有链接文件和文件夹。在每次获取操作时,我都想读取此文件并链接中心文件中指定的文件夹和文件。但是,我找不到扩展get操作的方法。有没有人有任何在VS中扩展它的经验?
答案 0 :(得分:2)
TFS没有提供扩展Get操作的方法。您可以轻松创建一个自定义的PowerShell或批处理文件,而不是调用tf.exe
,但是由于Team Build和Visual Studio使用客户端对象模型直接调用TFS,因此您不会轻易将自己设置为
最终一切皆有可能。您可以为Team Build编写自定义构建操作以替换标准get操作,或者创建在标准get操作完成后触发的操作。您可以编写一个vsix
可视工作室扩展,在Visual Studio的菜单中替换标准的Get操作,并获得可以被认为可行的内容。但我不建议这样做。它远非标准,远非可持续发展。您必须在Visual Studio中取消这么多默认行为(检出已更改的文件,将文件添加到项目文件时将文件添加到源控件等等)。
SourceSafe曾经也有这个功能(它被称为钉扎),微软在创建TFVC时删除了它。他们现在建议您使用branching and merging to synchronize these files across multiple projects,,确保Source控件中的源结构与构建期间磁盘上的源结构相同。
您可以在项目文件中also make use of the Add-as-Link option。这允许您将原始文件保留在其原始位置,但MsBuild将了解在项目结构中此文件实际上位于其他位置。或者将链接的文件打包到NuGet包中,并使用Dependency Management using NuGet guide帮助您在构建期间将文件放在正确的位置。
最后,您可以使用工作空间映射获得非常有创意,许多人永远不会比映射$/project
- > $(SourceDir)
,但实质上工作空间映射就像您描述的文件。一种将源从源控件布局到磁盘的方法。你可以这样做:
$/Project/DEV/MyProject
- >$(SourceDir)\MyProject
$/Project/Shared/FilesToCopy
- >$(SourceDir)\Shared
您甚至可以在同一个集合中添加其他项目中的文件:
$/AnotherProject/Shared
- >$(SourceDir)\MoreShared
有些人知道,你可以布置单个文件:
$/AnotherProject/CompanyAssemblyInfoItems.cs
- >$(SourceDir)\CompanyAssemblyInfoItems.cs
唯一不能做的是将地图文件映射为已映射文件夹的子项。在这种情况下,您可能需要让工作区映射执行提取源,然后使用.targets
文件中包含的.csproj
文件来执行文件复制。