我在寻找一种实用工具,将删除章绑定自动定位置的解决方案文件。我发现了几个提到的这种工具:

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

这看起来像什么我需要的-删除。scc的文件并修改了.sln。*proj文件。然而,我可找不出如何实际上得到实上的附件,后似乎实际上不存在。

没有任何人有一份这种工具或知道我在哪里可以找到类似的东西之前,我重写它自己?我有137解决方案de-绑所以这样做的手动不是一个具有吸引力的选择。

有帮助吗?

解决方案

我在不久前写这种类型的工具,而你是在正确的轨道上,需要做的事情上。

下面是让你开始一些代码。它应该为所有.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();
    });

编辑PROJ文件

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

其他提示

这里就是链接到一个新创建的 VSSBindingRemover.该软件已经建立基于杰里米和juanjo.arana的答案。你可以下载 源代码可执行 从想.

如果这只是你至极处理文件系统的影响,普通的命令提示符下的命令应该能够做到这一点:

del *.scc /s /q
attrib -r *.* /s

添加以下代码来设置文件不是只读的您将其删除之前:

变种allFiles = slnFiles.Union(projFiles).Union(vssFiles).ToList();

allFiles.ForEach(F => f.IsReadOnly = TRUE);

我使用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 

我已经扩大 Mikael的VSSBindingRemover 应用程序。这里是一个完整的清单的变化:

  • 更新的解决方案Visual Studio2010年。
  • 更新的项目。净4.0.
  • 更经常的表情去除空行的解决方案和项目文件后清理。
  • 加入代码用来除去。索文件。
  • 修改码删除只读财产上的所有文件。
  • 增加的支持DTS(.dtproj)、C++(.vcxproj)和部署(.vdproj)的项目类型。
  • 分离核心功能进入自己的图书馆,可容易地用在其他项目。
  • 分开的现有windows客户端进入其自己的项目,使用核心功能的图书馆。
  • 创建了一个命令行客户使用的核心功能的图书馆。命令行客户接受其输入通过两个的命令行参数,以及标准输入流,因此它支持管道。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top