2012-01-10 14 views
12

मेरे पास एक बड़ा समाधान है और कई * .cs-files हैं जो वास्तव में मेरे समाधान (csproj-files में शामिल नहीं) से संबंधित नहीं हैं। क्या उन सभी को खोजने और निकालने का कोई तरीका है?समाधान में अप्रयुक्त सीएस-फाइलों को हटाएं

+1

आपका मतलब है कि फ़ाइलें डिस्क पर हैं, लेकिन किसी भी प्रोजेक्ट में शामिल नहीं हैं और आप उन्हें डिस्क से हटाना चाहते हैं? या क्या आपका मतलब है कि वे आपके समाधान में शामिल हैं, लेकिन कक्षाओं का कभी भी उपयोग नहीं किया जाता है? – Ray

+1

अप्रयुक्त कक्षाएं Resharper का उपयोग करके पाई जा सकती हैं: http://stackoverflow.com/questions/4646174/resharper-find-all-unused-classes लेकिन मुझे यकीन नहीं है कि आप यही पूछ रहे हैं। – Ray

+2

संभव डुप्लिकेट [विजुअल स्टूडियो मैक्रो: उन फ़ाइलों को ढूंढें जो प्रोजेक्ट में शामिल नहीं हैं?] (Http://stackoverflow.com/questions/2000197/visual-studio-macro-find-files-that-arent-cluded- इन-द-प्रोजेक्ट) – Ray

उत्तर

5

यह पावरशेल स्क्रिप्ट आपको जो चाहिए वह करना चाहिए। यह शामिल कोड फ़ाइलों को प्राप्त करने के लिए प्रोजेक्ट फ़ाइल को पार करता है। फिर यह उस सूची की तुलना डिस्क पर वास्तविक फ़ाइलों से करता है। शेष फाइलें आपकी अप्रयुक्त/अप्रचलित फाइलें हैं।

स्क्रिप्ट या तो डिस्क से अप्रयुक्त फ़ाइलों को हटा सकता है या उन्हें TFS में हटाए जाने के रूप में प्रस्तुत कर सकता है।

<# 
.SYNOPSIS 
Find and process files in a project folder that are not included in the project. 


.DESCRIPTION 
Find and process files in a project folder that are not included in the project. 
Options to delete the files or to add them as pending deletes for TFS. Use TF.exe to pend the deletes and start the check-in process for the files. 
This is necessary when trying to delete files that are not currently included in a Visual Studio project. 

.PARAMETER Project 
The path/name for the project file. 

.PARAMETER VsVersion 
The Visual Studio version (10, 11, 12). Used to locate the tf.exe file. 

.PARAMETER DeleteFromDisk 
Just delete the files from disk. No interaction with any source control. 

.PARAMETER TfsCheckin 
After pending the deletes, open the check-in dialog. 

#> 

[CmdletBinding()] 
param(
    [Parameter(Position=0, Mandatory=$true)] 
    [string]$Project, 
    [Parameter(Mandatory=$false)] 
    [ValidateRange(10,12)] 
    [int] $VsVersion = 12, 
    [switch]$DeleteFromDisk, 
    [switch]$TfsCheckin 
) 

$ErrorActionPreference = "Stop" 
$tfPath = "${env:ProgramFiles(X86)}\Microsoft Visual Studio $VsVersion.0\Common7\IDE\TF.exe" 

$projectPath = Split-Path $project 


if($Project.EndsWith("csproj")) 
{ 
    $fileType = "*.cs" 
} 
else 
{ 
    $fileType = "*.vb" 
} 
$fileType 


$projectFiles = Select-String -Path $project -Pattern '<compile' | % { $_.Line -split '\t' } | ` 
    % {$_ -replace "(<Compile Include=|\s|/>|["">])", ""} | % { "{0}\{1}" -f $projectPath, $_ } 
Write-Host "Project files:" $projectFiles.Count 


$diskFiles = gci -Path $path -Recurse -Filter $fileType | % { $_.FullName} 
Write-Host "Disk files:" $diskFiles.Count 


$diff = (compare-object $diskFiles $projectFiles -PassThru) 
Write-Host "Excluded Files:" $diff.Count 

#create a text file for log purposes 
$diffFilePath = Join-Path $projectPath "DiffFileList.txt" 
$diff | Out-File $diffFilePath -Encoding UTF8 
notepad $diffFilePath 


#just remove the files from disk 
if($DeleteFileOnly) 
{ 
    $diff | % { Remove-Item -Path $_ -Force -Verbose} 
} 
else #TFS options 
{ 
    #this will add the files as pending deletes in TFS (awaiting check-in) 
    $diff | % { 
     [Array]$arguments = @("delete", "`"$_`"") 
     & "$tfPath" $arguments 
    } 

    if($Checkin) 
    { 
     #start the check-in process for the pending deletes 
     [Array]$arguments = "checkin", "/recursive", "$projectPath" 
     & $tfPath $arguments 
    } 
} 
+1

धन्यवाद! मैंने इस स्क्रिप्ट का उपयोग एक और विस्तृत विवरण बनाने के लिए किया है जिसमें अन्य प्रकार की फाइलें शामिल हैं और टीएफएस का उपयोग नहीं करती हैं: https://gist.github.com/mcliment/d9008a9288cea9d088af –

+3

मैंने अभी भी एक और PowerShell स्क्रिप्ट बनाने के लिए इस फ़ाइल का उपयोग किया है और @ MarcCliment की एक एकल प्रोज फ़ाइल की बजाय .sln फ़ाइल लेता है। यह सभी फ़ाइलों को छोड़कर हटा देता है प्रदत्त समाधान में परियोजनाएं। इसे जांचें! http: // g oo.gl/PdR9Fg – mikesigs

+0

मैं संशोधित स्क्रिप्ट का उपयोग @ mikesigs से करता हूं, एक आकर्षण की तरह काम करता है सिवाय इसके कि यह गलत तरीके से कुछ फ़ाइलों को एक WPF अनुप्रयोग (XAML फ़ाइलों) से निष्क्रिय के रूप में दिखाता है। – Roemer

6

जब आप समाधान एक्सप्लोरर में प्रोजेक्ट का चयन करते हैं, तो समाधान एक्सप्लोरर के टूलबार में "सभी फ़ाइलें दिखाएं" बटन पर क्लिक करें। यह आपको प्रोजेक्ट निर्देशिका में फ़ाइलें और फ़ोल्डर्स दिखाएगा, लेकिन परियोजना में शामिल नहीं हैं। यह आपको उन्हें हटाने या परियोजना को पढ़ने की अनुमति देता है।

मुझे स्वचालित समाधान की जानकारी नहीं है, इसलिए आपको इसे प्रत्येक प्रोजेक्ट के लिए मैन्युअल रूप से करना होगा।

+1

हां, मुझे पता है कि समाधान, लेकिन मेरी परियोजना बहुत बड़ी है, इसलिए मैं इसे स्वचालित करने के लिए कुछ ढूंढ रहा हूं :-( – Nagg

2

स्रोत नियंत्रण में सभी फ़ाइलों को जोड़ने के लिए दृश्य स्टूडियो का उपयोग करें। यह केवल उन फ़ाइलों को जोड़ देगा जो एक परियोजना का हिस्सा हैं, इसलिए गैर-प्रोजेक्ट फ़ाइलों को नहीं जोड़ा जाएगा। फिर आप बस सभी फाइलें कर सकते हैं और परियोजना को कहीं और जांच सकते हैं। लक्ष्य स्थान में केवल प्रासंगिक फाइलों की जांच की जाएगी।

यह देखते हुए कि आपके पास एक बड़ी परियोजना है, यह निश्चित रूप से संभव नहीं है कि आपके पास पहले से ही कुछ प्रकार का स्रोत नियंत्रण नहीं है, इसलिए आपको मौजूदा कनेक्शन तोड़ना पड़ सकता है, चेकआउट के बाद मूल स्रोत स्थान को साफ़ कर सकते हैं स्थान, लक्ष्य को मूल पर कॉपी करें और मूल स्केल को मूल में फ़ाइल निष्कासन का पता लगाने दें और हटाने को सबमिट करें।

संबंधित मुद्दे