우리 프로젝트가 발전함에 따라 많은 .cs 파일이 프로젝트에서 제거되고 이름이 바뀌었지만 소스 컨트롤에 남아 있습니다. 따라서 최신 코드를 가져 오면 .csproj 파일에서 더 이상 참조되지 않는 모든 .cs 파일을 가져옵니다.더 이상 프로젝트에없는 프로젝트 폴더에서 .CS 파일을 찾는 방법은 무엇입니까?
누구나이 파일을 감지하고 제거하는 쉽고 안정적인 메커니즘을 알고 있습니까?
우리 프로젝트가 발전함에 따라 많은 .cs 파일이 프로젝트에서 제거되고 이름이 바뀌었지만 소스 컨트롤에 남아 있습니다. 따라서 최신 코드를 가져 오면 .csproj 파일에서 더 이상 참조되지 않는 모든 .cs 파일을 가져옵니다.더 이상 프로젝트에없는 프로젝트 폴더에서 .CS 파일을 찾는 방법은 무엇입니까?
누구나이 파일을 감지하고 제거하는 쉽고 안정적인 메커니즘을 알고 있습니까?
이 작업에 스크립팅 언어를 사용하는 것이 가장 좋습니다. PowerShell은 이와 같은 상황에 매우 적합하다는 것을 알게되었습니다.
1 단계는 csproj 파일에있는 실제 .cs 파일을 모두 찾는 것입니다. 다음 함수는 모든 csproj 파일의 디렉토리 구조를 검색하고
function Get-IncludedCsFiles() {
param ($rootPath = $(throw "Need a path"))
$projFiles = gci -re -in *.csproj $rootPath
foreach ($file in $projFiles) {
$dir = split-path $file.FullName
foreach ($line in (gc $file)) {
if ($line -match 'Compile\s+Include="([^"]+)"') {
join-path $dir $matches[1]
}
}
}
}
는 이제 다음 사전에 그것을 포장하기 만하면 모두가 검색을 할 해당 파일에 포함 된 .cs 파일의 설정을 반환합니다 디렉토리 구조에
$map = @{}
$pathToSearch = "Path\To\Search"
Get-IncludedCsFiles $pathToSearch |
%{
if(!$map.Contains($_))
{
$map.Add($_, $true)
}
}
$notIncluded = gci -re -in *.cs $path | ?{ -not $map.Contains($_.FullName) }
현재로서는 VS를 가지고 있지 않지만 솔루션 탐색기에 "프로젝트에 파일 보이지 않음"옵션이 있습니까?
솔루션 탐색기 도구 모음에서 "모든 파일 표시"입니다. – Richard
VS 솔루션 탐색기에서 "모든 파일 표시"를 시도하십시오. 이 문제를 방지 할 수 있습니다
한 가지 방법은 절차 적이다 : A는에서 "최신 얻을"일을하는 대신
: 은 (어떤 프로젝트 파일이없는 "웹 사이트"프로젝트를 제외한 모든 프로젝트, 작동) 소스 제어 도구는 항상 Visual Studio 내에서 "소스 제어에서 열기"를 수행하고 솔루션 탐색기에서 최신 항목을 가져옵니다. VS는 프로젝트에 속한 파일 만 가져옵니다.
완벽한 대답은 아닙니다. 병합을 수행하면 지점의 모든 파일이 다운 될 가능성이 있지만, 우리에게는 매우 효과적입니다.
(물론 VS 통합을 제공하는 소스 제어 도구를 사용해야합니다. 컴파일되지 않았지만 필수 파일 (아이콘 등)을 프로젝트에 추가해야합니다. VS에 의해 당겨지지 않는다).
솔루션에 대한 감사합니다 JaredPar! 그 때문에 그것은 나를 위해 훨씬 쉬웠다 :) 당신이 제공 한 조금 강력한 버전.
function Get-IncludedCsFiles()
{
param ($rootPath = $(throw "Need a path"))
$projFiles = gci -re -in *.csproj $rootPath
foreach ($file in $projFiles)
{
$dir = split-path $file.FullName
foreach ($line in (gc $file))
{
$correctedLine = $line -replace '%28', '(' #some files have "(" in them, and csproj changes them for %28
$correctedLine = $correctedLine -replace '%29', ')'
if ($correctedLine -match 'Compile\s+Include="([^"]+)"')
{
$filepath = join-path $dir $matches[1]
[System.IO.Path]::GetFullPath($filePath)#this resolves path (removes \..\)
}
}
}
}
$tempFilePattern = '*\obj\*'
$map = @{}
$pathToSearch = "Path to search"
$resultFilePath = [io.path]::combine($pathToSearch, 'notIncluded.txt')
Get-IncludedCsFiles $pathToSearch |
%{
if(!$map.Contains($_))
{
$map.Add($_, $true)
}
}
echo "Map created"
$notIncluded = gci -re -in *.cs $path | ?{ (-not $map.Contains($_.FullName)) -and !($_ -like $tempFilePattern)} | %{$_.FullName}
$notIncluded | Out-File $resultFilePath
$notIncluded |
%{
#tf delete $_ #Remove from TFS
}
는 또한 고려의 이름에 괄호가 파일, (그 아래 또는 하위 폴더) csproj와 같은 폴더에없는 파일을합니다. 또한 컴파일 (/ obj/폴더)을 사용하여 생성 된 임시 생성 파일은 포함되지 않습니다. 출력 파일의 모든 경로를 나열하고 심지어 TFS에서 제거 할 수 있습니다.
효과적으로 http://stackoverflow.com/questions/707113/in-visual-studio-whats-a-quickway-to-delete-all-the-exclude-files-from-a-proje의 dup –
이 파일들은 소스 제어에만 존재하며 특별한 마커를 가지고 있다고 생각합니다. 직접 소스 제어에서 삭제하려고 시도합니다 – isxaker