从解决方案中删除TFS连接

时间:2014-11-18 08:47:56

标签: visual-studio tfs

如何在不映射到TFS的情况下将解决方案作为干净副本?问题是,当我尝试打开它时,此消息显示。我想在没有TFS连接的情况下正常打开它。

enter image description here

7 个答案:

答案 0 :(得分:142)

要完全删除TFS源代码控制绑定,请执行以下两个步骤:

  1. 转到解决方案的文件夹,查找并删除所有包含*.vssscc*.vspscc扩展名的文件。
  2. 在记事本中打开解决方案的.sln文件,然后找到&删除GlobalSection(TeamFoundationVersionControl)部分。
  3. Reference Link

答案 1 :(得分:37)

如果要永久完全从源代码管理中分离解决方案,请尝试以下操作:

  1. 单击“否”按钮以避免连接到TFS。
  2. 在文件菜单中,转到源控件选项并清除绑定。你特别需要文件 - 源代码管理 - 高级 - 更改源代码管理......
  3. 保存解决方案。
  4. 下次打开解决方案时,系统不会提示您连接到TFS。

答案 2 :(得分:32)

编辑解决方案文件并从中删除以下部分。它不会是相同的,但会是相似的。

GlobalSection(TeamFoundationVersionControl) = preSolution
    SccNumberOfProjects = 2
    SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
    SccTeamFoundationServer = <YourTFSURL>
    SccLocalPath0 = .
    SccProjectUniqueName1 = .
    SccLocalPath1 = .
EndGlobalSection

答案 3 :(得分:14)

我没有足够的声誉来评论,但只是想补充一点,Tabish的解决方案确实可以正常工作以完全从源代码控制中删除解决方案,尤其是当TFS服务器因某种原因无法访问时(例如您下载了一个项目,作者在上传之前没有从他们自己的源代码控制中删除。)

但是,要从项目中完全删除所有源代码控制的痕迹,并避免在该答案的其他注释中记录的警告(例如“无法找到解决方案的映射......”),您必须还从解决方案中的每个项目文件中删除以下行(显然这些行曾经在VS的早期版本的解决方案文件中,但在VS2017中,它们可以在项目文件中找到解决方案 - 例如[project] .csproj):

SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

感谢这里有明确的答案和其他评论,指出了这一点:

visual source safe - how to remove bindings from solution w/o opening in visual studio

将此与Tabish的答案相结合似乎是从源代码管理中手动删除解决方案的最完整方法。

答案 4 :(得分:8)

  • 要删除绑定,您可以使用Visual Studio:菜单文件/源代码管理/高级/更改源代码管理。

  • 您也可以通过从sln和csproj中移除任何SCC来自行完成。

  • 如果您经常导出源文件,则可以使用ExportSrc。它有许多选项,例如删除TFS绑定(默认为ON)。

答案 5 :(得分:3)

大多数答案都提供了解决方案,但我宁愿使用Visual Studio 2017提供的解决方案。

在Visual Studio的菜单栏上,转到团队,然后选择从Team Foundation Server断开连接。 就是这样。

答案 6 :(得分:0)

在并购和技术转让后,我刚刚继承了TeamFoundation项目的集合。大约有30多种解决方案以及一堆* .vssscc和* .vspscc文件。

根据上面每个人的输入,我编写了一个powershell函数来递归指定的根文件夹,删除文件,然后编辑解决方案文件以删除TeamFoundationVersionControl部分。

用法是Remove_TFSfiles "pathname" $booleanflag

要查看哪些文件将受到影响,请使用$ false(使用-whatif)

Remove_TFSfiles "C:\MyDevFolder" $false

要实际删除这些文件,请使用$ true

Remove_TFSfiles "C:\MyDevFolder" $true

这是功能

Function Remove_TFSfiles { 
param(
[string]$FolderName = $(throw "-FolderName is required."),
[bool]$RemoveFiles = $(throw "-RemoveFiles (either $true or $false) is required.")
)
$TFSExtensions = '*.vspscc','*.vssscc'                          

if($RemoveFiles) {
    dir -path $FolderName -force -include $TFSExtensions -Recurse | remove-item -Force        
    # Now iterate through any solution files, and whack the TeamFoundationVersionControl section
    Get-ChildItem -Path $FolderName -Filter "*.sln" -Recurse | ForEach-Object {
        $slnFilename = $_.Fullname 
        write-host -NoNewline "Editing $slnFilename... "
        $File = Get-Content $slnFilename -raw
        $Filestr = [regex]::escape(""+$File+"")
        # The regex escapes must themselves be meta-escaped, therefore "\(" becomes "\\" + "\(" = "\\\(". Did I mention I hate regex?
        $Result = $Filestr -replace "\\tGlobalSection\\\(TeamFoundationVersionControl\\\).*?EndGlobalSection\\r\\n",""
        $result = [regex]::unescape($result)
        sp $slnFilename IsReadOnly $false
        $result | set-content $slnFilename 
        write-host "Done"
    }
    write-host -f red "Finished actually removing files and editing *.sln files"
} else {
    dir -path $FolderName -force -include $TFSExtensions -Recurse | remove-item -WhatIf
    write-host -f green "Finished pretending to remove files"
    # Now iterate through any solution files, and whack the TeamFoundationVersionControl section
    Get-ChildItem -Path $FolderName -Filter "*.sln" -Recurse | ForEach-Object {
        $slnFilename = $_.Fullname 
        write-host "Not Editing $slnFilename"
    }
}

}