我正在寻找一个实用程序,它会在给定解决方案文件的位置的情况下自动删除SourceSafe绑定。我发现了这个工具的几个提及:
http://codebetter.com/blogs/darrell.norton/archive/2008/05/16/sourcesafe-binding-remover.aspx
这看起来就像我需要的那样 - 删除.scc文件并修改.sln和。* proj文件。但是,我无法弄清楚如何实际获得该实用程序 - 该帖子上的附件似乎实际上并不存在。
在我自己重写之前,有没有人拥有此工具的副本或知道我在哪里可以找到类似内容?我有137个解除绑定的解决方案,所以手动执行此操作并不是一个有吸引力的选择。
答案 0 :(得分: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();
});
编辑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();
});
答案 1 :(得分:3)
这是新创建的VSSBindingRemover的链接。该软件是基于Jeremy和juanjo.arana的答案创建的。您可以从GitHub下载source code和the executable。
答案 2 :(得分:1)
如果它只对您要处理的文件系统产生影响,那么普通命令提示符命令应该能够执行:
del *.scc /s /q
attrib -r *.* /s
答案 3 :(得分:1)
在删除文件之前,添加以下代码将文件设置为非只读:
var allFiles = slnFiles.Union(projFiles).Union(vssFiles)。ToList();
allFiles.ForEach(f =&gt; f.IsReadOnly = true);
答案 4 :(得分: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
答案 5 :(得分:0)
我已经扩展了Mikael's VSSBindingRemover个应用程序。以下是完整的更改列表: