TFSにマッピングせずにソリューションをクリーンコピーとして作成する方法問題は、このメッセージを開こうとすると表示されることです。 TFS接続なしで通常どおりに開きたいです。
ソリューションをソース管理から完全かつ完全に切り離したい場合は、次を試してください。
次回ソリューションを開くと、TFSに接続するよう求められることはありません。
TFSソース管理バインディングを完全に削除するには、次の2つの手順を実行します。
*.vssscc
および*.vspscc
拡張子を持つすべてのファイルを見つけて削除します。.sln
ファイルをメモ帳で開き、GlobalSection(TeamFoundationVersionControl)
セクションを見つけて削除します。ソリューションファイルを編集し、次のセクションを削除します。同じではありませんが、似ています。
GlobalSection(TeamFoundationVersionControl) = preSolution
SccNumberOfProjects = 2
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = <YourTFSURL>
SccLocalPath0 = .
SccProjectUniqueName1 = .
SccLocalPath1 = .
EndGlobalSection
コメントするほどの評判はありませんが、Tabishのソリューションが実際に正しく機能し、特にTFSサーバーに何らかの理由で到達できない場合(たとえば、アップロード前に作成者が独自のソース管理から削除しなかったプロジェクト)。
ただし、プロジェクトからソース管理のすべての痕跡を完全に削除し、その回答に対する他のコメントに記載されている警告(「ソリューションのマッピングが見つかりませんでした...」など)を回避するには、ソリューションのすべてのプロジェクトファイルの以降の行(明らかにこれらは以前のバージョンのVSのソリューションファイルにありましたが、VS2017ではソリューションの各プロジェクトのプロジェクトファイル-例[project] .csproj):
SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
これを指摘してくれたマーク付きの回答と他のコメントに感謝します:
ビジュアルソースセーフ-Visual Studioで開くことなくソリューションからバインディングを削除する方法
これとTabishの答えを組み合わせることは、ソース管理からソリューションを手動で削除する最も完全な方法のようです。
バインディングを削除するには、Visual Studioを使用できます:メニューファイル/ソース管理/詳細設定/ソース管理の変更。
SlnおよびcsprojからSCC ...を削除して、自分で行うこともできます。
ソースファイルを頻繁にエクスポートする場合は、 ExportSrc を使用できます。 TFSバインディングの削除(デフォルトではオン)などの多くのオプションがあります。
ほとんどの答えは解決策を提供しましたが、私はむしろVisual Studio 2017が提供する解決策を使用します。
Visual Studioのメニューバーで、チームに移動し、Team Foundation Serverから切断を選択します。それでおしまい。
M&A買収と技術移転の後、TeamFoundationプロジェクトのコレクションを継承しました。 30以上のソリューションと、*。vsssccおよび* .vspsccファイルの大量のファイルがありました。
上記の全員の入力に基づいて、指定されたルートフォルダーを再帰し、ファイルを削除し、ソリューションファイルを編集してTeamFoundationVersionControlセクションを削除するpowershell関数を作成しました。
使用法は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"
}
}
}