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:

http: // codebetter .com / blogs / darrell.norton / archive / 2008/05/16 / sourcesafe-binding-remover.aspx

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.

È stato utile?

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top