在Visual Studio解决方案中为每个代码文件添加相同的注释

时间:2008-12-23 21:21:57

标签: visual-studio tfs comments

背景:我们正在使用VS 2008,正在从TFS 2005升级到2008年。

我们有一个包含多个项目的解决方案,总共有数百个代码文件。我们希望将相同的文本作为评论添加到所有这些文件(版权信息)。有谁知道快速/简单/有效的方法来做到这一点?另外,有没有办法通过TFS这样做,所以我们没有签出并检查每个文件?

我在CodeProject上找到了一些关于创建宏的代码,但是你必须单独打开每个文件,然后在每个文件上运行宏,这是我们希望避免的。

感谢。

5 个答案:

答案 0 :(得分:2)

对于你们来说,编写一个简单的程序来迭代遍历所有目录和所有代码文件(假设是* .cs等)并将文本添加到顶部应该是微不足道的。

构建,测试和运行它应该不到20分钟。

就TFS而言,只需从树顶部执行checkout命令即可。它将检查源代码管理中的每个文件。完成后,您也可以从顶部办理登机手续。

假设C#,请查看System.IO.Directory.GetDirectories()......

答案 1 :(得分:0)

我认为一种方法(感谢实用程序员第3章 - 文本操作)是为您创建一个脚本,可能是Python,PowerShell或Perl。

答案 2 :(得分:0)

如果您安装了Cygwin,则可以使用以下Bash脚本:

# Process all .cpp and .h files under the directory tree at $PROJECTROOT
# To add other file types, add more "-o -name \*.ext" clauses.
# $COPYRIGHTFILE is the file containing your copyright message
COPYRIGHTLENGTH=$(wc -l $COPYRIGHTFILE)
for file in $(find $PROJECTROOT -name \*.cpp -o -name \*.h); do
    if diff <(head -n $COPYRIGHTLENGTH $file) $COPYRIGHTFILE; then
        (cat $COPYRIGHTFILE; cat $file) > /tmp/file
        mv /tmp/file $file
    fi
done

查找目录树$ PROJECTROOT下的每个.cpp或.h文件,将开头与版权信息进行比较,如果不同,则通过临时文件将版权添加到文件中。

免责声明:未经测试,首先进行测试,使用风险自负。

答案 3 :(得分:0)

  

[我]有办法通过TFS这样做,所以我们没有签出并检查每个文件?

将此更改作为文件更改历史记录的一部分是个好主意。所以,你想要查看&amp;检查所有文件。

Kevin Pilch-Bisson的博文“Formatting all C# files in a solution”是一个很好的资源。您可以修改该算法以进行编辑。

答案 4 :(得分:0)

我有published code,它完全符合你想要完成的20行。

该代码的参考包含在下面:


 1:         static void Main(string[] args)
 2:         {
 3:             string path = "C:\\...TopLevelFolder";
 4:             string copyright = "//Copyright © 2011 Rex Cardan, Ph.D";
 5:             string[] files = Directory.GetFiles(path, "*.cs",
 6:                                          SearchOption.AllDirectories);
 7:             foreach (string file in files)
 8:             {
 9:                 if (file.Split('\\')[file.Split('\\').Length-1]!= "AssemblyInfo.cs")
 10:                 {
 11:                     using (StreamWriter sw = File.AppendText(file))
 12:                     {
 13:                         sw.WriteLine("\r\n");
 14:                         sw.WriteLine(copyright);
 15:                         //Normalize Line Endings
 16:                         sw.WriteLine("\r\n");
 17:                     }
 18:                 }
 19:             }
 20:         }