【问题标题】:Remove TFS Connection From Solution从解决方案中删除 TFS 连接
【发布时间】:2015-01-15 09:19:36
【问题描述】:

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

【问题讨论】:

    标签: visual-studio tfs


    【解决方案1】:

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

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

    更多详情请参考Link

    【讨论】:

    • 也为我解决了这个问题。我猜你不能单独从 Visual Studio 中完全提取 TFS。
    • 这对我有用,但 Team Foundation 输出仍然显示“找不到解决方案的映射。找不到解决方案的映射。活动解决方案已与源暂时断开连接控制,因为服务器不可用。要尝试重新连接到源代码控制,请在服务器可用时关闭并重新打开解决方案。如果要将此解决方案连接到另一台服务器,请使用更改源代码控制对话框。"跨度>
    • 这对我有用。我按照“参考链接”上的说明进行操作。
    • 所有 *.vs* 文件表示解决方案和项目文件夹。
    • 首先取消选中 sln 文件属性中的只读复选框,然后执行其余操作。
    【解决方案2】:

    如果您想永久彻底地从源代码管理中分离解决方案,请尝试以下操作:

    1. 单击“否”按钮可避免连接到 TFS。
    2. 在文件菜单中,转到源代码管理选项并清除绑定。你会特别想要文件 - 源代码控制 - 高级 - 更改源代码控制...
    3. 保存解决方案。

    下次打开解决方案时,系统不会提示您连接到 TFS。

    【讨论】:

    • 就我而言,有必要使用 VS2013 将 TFS 与 VS2010 解决方案分离。
    • 我必须在 Chrome 中重新启用 Javascript(为测试而关闭)才能显示此选项。公平地说,MSVC 确实提到在 TFS 登录屏幕上闪现一条警告消息。
    • 这不能正常工作,因为它不会删除绑定文件,因此以后很难重新连接到源代码管理。
    • 在我的例子中,“断开连接”按钮被禁用,有两个条目。
    • 在 VS2017 中这不起作用,下次打开解决方案时,您将再次必须选择“不联系 tfs”和“确定”以显示随后的错误消息。
    【解决方案3】:

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

    注意:要编辑解决方案文件,请转到项目文件夹,然后用记事本打开YouSolutionName.sln 文件。

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

    【讨论】:

      【解决方案4】:

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

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

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

      感谢此处的标记答案和其他 cmets 指出这一点:

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

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

      【讨论】:

        【解决方案5】:
        • 要删除绑定,您可以使用 Visual Studio:菜单文件/源代码控制/高级/更改源代码控制。

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

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

        【讨论】:

          【解决方案6】:

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

          在 Visual Studio 的菜单栏上,转到 Team 并选择 Disconnect from Team Foundation Server。 就是这样。

          【讨论】:

          • 它只会关闭你的解决方案.. ?
          【解决方案7】:

          在并购和技术转让之后,我刚刚继承了一系列 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) {
                  Get-ChildItem -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)
                      Set-ItemProperty $slnFilename IsReadOnly $false
                      $result | Set-Content $slnFilename 
                      Write-Host "Done"
                  }
                  Write-Host -f red "Finished actually removing files and editing *.sln files"
              }
              else {
                  Get-ChildItem -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"
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2013-04-06
            • 1970-01-01
            • 1970-01-01
            • 2017-10-03
            • 2019-01-17
            • 2018-12-31
            • 1970-01-01
            • 2012-01-04
            • 1970-01-01
            相关资源
            最近更新 更多