2

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

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

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

谢谢。

4

4 回答 4

1

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

构建、测试和运行它应该花费不到 20 分钟的时间。

就 TFS 而言,只需从树的顶部执行 checkout 命令。它将检查源代码控制中的每个文件。完成后,您也可以从顶部签入。

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

于 2008-12-23T21:28:15.773 回答
1

如果您安装了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 文件,将开头与版权消息进行比较,如果不同,则通过临时文件将版权添加到文件中。

免责声明:未经测试,请先测试并自行承担使用风险。

于 2008-12-23T21:30:18.030 回答
1

发布的代码完全符合您在 20 行中尝试完成的任务。

该代码的参考如下:

static void Main(string[] args)
{
    string path = "C:\\...TopLevelFolder";
    string copyright = "//Copyright © 2011 Rex Cardan, Ph.D";
    string[] files = Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories);
    foreach (string file in files)
    {
        if (file.Split('\\')[file.Split('\\').Length-1]!= "AssemblyInfo.cs")
        {
            using (StreamWriter sw = File.AppendText(file))
            {
                sw.WriteLine("\r\n");
                sw.WriteLine(copyright);
                //Normalize Line Endings
                sw.WriteLine("\r\n");
            }
        }
    }
}
于 2011-09-08T18:05:15.243 回答
0

[我]有没有办法通过 TFS 做到这一点,所以我们没有签出和签入每个文件?

将此更改作为文件更改历史记录的一部分是个好主意。因此,您确实想要签出并签入所有文件。

Kevin Pilch-Bisson 的博客文章“在解决方案中格式化所有 C# 文件”是一个很好的资源。您可以修改该算法以进行编辑。

于 2008-12-29T06:49:59.253 回答