Utility per la rimozione di attacchi SourceSafe?
-
22-08-2019 - |
Domanda
Sto cercando un'utility che consente di rimuovere automaticamente i binding SourceSafe data la posizione del file di soluzione. Ho trovato diverse menzioni di questo strumento:
Questo sembra esattamente quello che mi serve - elimina i file .scc e modifica .sln e * proj file.. Tuttavia, non riesco a capire come ottenere in realtà l'utilità -. L'allegato sul quel post sembra in realtà non essere lì
Qualcuno ha una copia di questo strumento o sa dove posso trovare qualcosa di simile prima di riscrivere da solo? Ho 137 soluzioni di de-bind in modo da farlo manualmente non è un'opzione attraente.
Soluzione
Ho scritto questo tipo di utilità non troppo tempo fa e tu sei sulla strada giusta con quello che deve essere fatto.
Ecco un po 'di codice per iniziare. Dovrebbe funzionare per tutti i progetti .Net (VS 2003 - VS 2008) tra cui progetti di distribuzione:
//get list of all files to be edited/removed
SlnFiles = new List<FileInfo>(SelectedDir.GetFiles("*.sln", SearchOption.AllDirectories));
ProjFiles = new List<FileInfo>(SelectedDir.GetFiles("*.*proj", SearchOption.AllDirectories));
VssFiles = new List<FileInfo>(SelectedDir.GetFiles("*.vssscc", SearchOption.AllDirectories));
VssFiles.AddRange(SelectedDir.GetFiles("*.vsscc", SearchOption.AllDirectories));
VssFiles.AddRange(SelectedDir.GetFiles("*.scc", SearchOption.AllDirectories));
VssFiles.AddRange(SelectedDir.GetFiles("*.vspscc", SearchOption.AllDirectories));
eliminazione di file VSS
//Delete all vss files
VssFiles.ForEach(vss =>{vss.Delete();});
Modifica dei file SLN
//Edit sln files
SlnFiles.ForEach(sln =>
{
string fullName = sln.FullName;
string relPath = sln.Directory.FullName.Replace(workingDir.FullName, string.Empty);
StreamReader reader = sln.OpenText();
String text = reader.ReadToEnd();
reader.Close();
string regex = "\tGlobalSection\\(SourceCodeControl\\) [\\s\\S]*? EndGlobalSection\r\n";
RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
Regex reg = new Regex(regex, options);
text = reg.Replace(text, string.Empty);
if (text.StartsWith(Environment.NewLine))
text = text.Remove(0, 2);
StreamWriter writer = new StreamWriter(fullName);
writer.Write(text);
writer.Flush();
writer.Close();
});
file proj Modifica
//edit proj files
ProjFiles.ForEach(proj =>
{
string fullName = proj.FullName;
string relPath = proj.Directory.FullName.Replace(workingDir.FullName, string.Empty);
StreamReader reader = proj.OpenText();
String text = reader.ReadToEnd();
reader.Close();
string regex = "\"*<*Scc.*?(>|\\W=\\W\").*?(>|\")";
RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
Regex reg = new Regex(regex, options);
text = reg.Replace(text, string.Empty);
StreamWriter writer = new StreamWriter(fullName);
writer.Write(text);
writer.Flush();
writer.Close();
});
Altri suggerimenti
Ecco il link per una nuova creazione VSSBindingRemover . Il software è stato realizzato in base alle risposte di Jeremy e juanjo.arana di. È possibile scaricare il codice sorgente e la eseguibile dal GitHub.
Se è solo l'impatto sul file-system si wich da gestire, comandi pianura prompt dei comandi dovrebbero essere in grado di farlo:
del *.scc /s /q
attrib -r *.* /s
aggiungere il seguente codice per impostare il file come non sola lettura prima di eliminarli:
var AllFiles = slnFiles.Union (projFiles) .Union (vssFiles) .ToList ();
allFiles.ForEach (f => f.IsReadOnly = true);
Io uso Cygwin, vero: P
find.exe . -type f -name *.dsp -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*Scc_ProjName.*$//g'
find.exe . -type f -name *.dsp -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*Scc_LocalPath.*$//g'
find.exe . -type f -name *.dsw -print0 | xargs -0 -r sed -i '/begin.source.code.control/,/end.source.code.control/d'
find.exe . -type f -name *.sln -print0 | xargs -0 -r sed -i '/GlobalSection(SourceCodeControl)/,/EndGlobalSection/d'
find.exe . -type f -name *.*proj -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*SccProjectName.*$//g'
find.exe . -type f -name *.*proj -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*SccLocalPath.*$//g'
find.exe . -type f -name *.*proj -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*SccProvider.*$//g'
find.exe . -type f -name *.vssbak -print0 | xargs -0 -r rm -f
find.exe . -type f -name *.*scc -print0 | xargs -0 -r rm -f
Ho ampliato applicazione di Mikael VSSBindingRemover . Ecco la lista completa dei cambiamenti:
- soluzione Aggiornamento a Visual Studio 2010.
- progetto aggiornato a .NET 4.0.
- Aggiornamento espressioni regolari per rimuovere le righe vuote in file di soluzione e di progetto dopo la pulizia.
- codice aggiuntivo per la rimozione dei file .suo.
- il codice modificato per rimuovere proprietà di sola lettura su tutti i file.
- Aggiunto il supporto per DTS (.dtproj), C ++ (.vcxproj) e distribuzione (.vdproj) tipi di progetto.
- funzionalità di base Separato nella propria libreria che può essere facilmente utilizzato all'interno di altri progetti.
- Separato finestre esistenti cliente in un proprio progetto che utilizza la libreria di funzionalità di base.
- Creato un client a riga di comando che utilizza la libreria di funzionalità di base. Il client della riga di comando accetta il suo input attraverso entrambi i parametri della linea di comando, così come flusso di input standard, in modo che supporta tubazioni.