4

我正在寻找一个实用程序,它会根据解决方案文件的位置自动删除 SourceSafe 绑定。我发现了这个工具的几个提及:

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

这看起来正是我所需要的——删除 .scc 文件并修改 .sln 和 .*proj 文件。但是,我不知道如何实际获得该实用程序 - 该帖子上的附件似乎实际上并不存在。

在我自己重写之前,有没有人有这个工具的副本或者知道在哪里可以找到类似的东西?我有 137 种解绑定解决方案,因此手动执行此操作不是一个有吸引力的选择。

4

6 回答 6

7

我不久前写了这种类型的实用程序,你在正确的轨道上需要做些什么。

这里有一些代码可以帮助您入门。它应该适用于所有 .Net 项目(VS 2003 - VS 2008),包括部署项目:

//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));

删除 VSS 文件

//Delete all vss files
            VssFiles.ForEach(vss =>{vss.Delete();});

编辑 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();
    });

编辑项目文件

//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();
    });
于 2009-05-18T16:13:12.620 回答
3

这是新创建的VSSBindingRemover的链接。该软件是根据 Jeremy 和 juanjo.arana 的回答创建的。您可以从 GitHub下载源代码可执行文件。

于 2010-07-30T16:20:02.383 回答
1

如果它只是对您要处理的文件系统的影响,那么普通的命令提示符命令应该能够做到:

del *.scc /s /q
attrib -r *.* /s
于 2009-05-18T15:53:15.283 回答
1

添加以下代码以在删除文件之前将文件设置为非只读:

var allFiles = slnFiles.Union(projFiles).Union(vssFiles).ToList();

allFiles.ForEach(f => f.IsReadOnly = true);

于 2010-05-12T10:36:03.253 回答
0

我使用 Cygwin,你呢: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 
于 2012-01-19T11:18:07.417 回答
0

我扩展了Mikael 的 VSSBindingRemover应用程序。以下是完整的更改列表:

  • 更新了 Visual Studio 2010 的解决方案。
  • 将项目更新到 .NET 4.0。
  • 更新了正则表达式以在清理后删除解决方案和项目文件中的空白行。
  • 添加了删除 .suo 文件的代码。
  • 修改代码以删除所有文件的只读属性。
  • 添加了对 DTS (.dtproj)、C++ (.vcxproj) 和部署 (.vdproj) 项目类型的支持。
  • 将核心功能分离到自己的库中,可以在其他项目中轻松使用。
  • 将现有的 Windows 客户端分离到使用核心功能库的自己的项目中。
  • 创建了一个使用核心功能库的命令行客户端。命令行客户端通过命令行参数和标准输入流接受其输入,因此它支持管道。
于 2013-01-07T22:21:08.347 回答