在Visual Studio 2012的所有源代码文件中插入版权通告/横幅

一些谷歌search后,我发现这一点: 使用Visual Studiomacros将版权标题插入源文件 。 看起来很有希望:

// <copyright file="Sample.cs" company="My Company Name"> // Copyright (c) 2012 All Rights Reserved // </copyright> // <author>Leniel Macaferi</author> // <date>08/30/2012 11:39:58 AM </date> // <summary>Class representing a Sample entity</summary> 

当我尝试Tools -> Macros菜单选项时,它不再存在于VS 2012中。以下是certificate: Visual Studio 11 Developer Preview中的macros 。 他们只是放弃了这个function。 🙁

所以,我只是想知道我可以使用哪个选项来将版权信息添加到我的解决scheme中的所有现有的源代码文件使用Visual Studio 2012.是否有任何标准的方式做到这一点,使用模板文件(有关T4 templates )还是PowerShell脚本? 我可以写一些代码来迭代.cs扩展名的文件,并添加版权信息,但这不是我所追求的。 我想知道一些工具来自动化这个过程。

你可以创build一个新的代码片段,只需inputcp + double tab来在你想要的地方插入通知(不用说你可以把关键字改成你想要的)。

唯一的问题是,从我所知,片段不支持时间函数,所以使用这种技术来获得date线的当前时间似乎是不可能的。 一个不太好的解决方法是使时间字段可编辑(类似于mbox代码段的工作方式),只需手动插入时间。

下面是一个片段外观的例子。 下面的代码片段将自动获取类名,并在您input“copyright”和双击选项卡的地方插入版权声明。

方法1

  <?xml version="1.0" encoding="utf-8" ?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>Copyright</Title> <Shortcut>Copyright</Shortcut> <Description>Code snippet for Copyright notice</Description> <Author>author name</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal Editable="false"> <ID>classname</ID> <Function>ClassName()</Function> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[// <copyright file="$classname$" company="My Company Name"> // Copyright (c) 2012 All Rights Reserved // <author>Leniel Macaferi</author> // </copyright> ]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets> 

方法2

另外,这里有一个你可以为你做的程序的例子。

 List<string> files = new List<string>() { "c:\\Form1.cs", "c:\\Form2.cs", }; foreach (string file in files) { string tempFile = Path.GetFullPath(file) + ".tmp"; using (StreamReader reader = new StreamReader(file)) { using (StreamWriter writer = new StreamWriter(tempFile)) { writer.WriteLine(@"// <copyright file=" + Path.GetFileNameWithoutExtension(file) + @" company=My Company Name> // Copyright (c) 2012 All Rights Reserved // </copyright> // <author>Leniel Macaferi</author> // <date> " + DateTime.Now + @"</date> // <summary>Class representing a Sample entity</summary> "); string line = string.Empty; while ((line = reader.ReadLine()) != null) { writer.WriteLine(line); } } } File.Delete(file); File.Move(tempFile, file); } 

当然需要一些错误捕获。 但是,这应该给你一个大概的想法,如何构build一个用户界面,添加你想要处理的文件。

方法3

也可以更改通常可以在以下位置find的类的模板:

 C:\Program Files (x86)\Microsoft Visual Studio <version>\Common7\IDE\ItemTemplates\CSharp\1033\ 

有时编辑ItemTemplatesCache也是显示结果所必需的。

以下是基于您的问题的示例模板:

 using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ >= 3.5)using System.Linq; $endif$using System.Text; /* <copyright file=$safeitemrootname$ company="My Company Name"> Copyright (c) 2012 All Rights Reserved </copyright> <author>Leniel Macaferi</author> <date>$time$</date> <summary>Class representing a Sample entity</summary>*/ namespace $rootnamespace$ { class $safeitemrootname$ { } } 

我将在这里添加一个我在这篇文章中find的PowerShell脚本: Powershell – 版权标题生成器脚本 。 它在发布问题之前捕捉了我的想法…

 param($target = "C:\MyProject", $companyname = "My Company") $header = "//----------------------------------------------------------------------- // <copyright file=""{0}"" company=""{1}""> // Copyright (c) {1}. All rights reserved. // </copyright> //-----------------------------------------------------------------------`r`n" function Write-Header ($file) { $content = Get-Content $file $filename = Split-Path -Leaf $file $fileheader = $header -f $filename,$companyname Set-Content $file $fileheader Add-Content $file $content } Get-ChildItem $target -Recurse | ? { $_.Extension -like ".cs" } | % ` { Write-Header $_.PSPath.Split(":", 3)[2] } 

我写了一些小修改来适应我的需求:

使用PowerShell在所有源代码文件中插入版权通知/标题/标题

如果这仍然是有趣的,有许可证头插件 ,可以添加一个完整的自定义标题创build任何文件。 目前,这与VS2013一起工作,但与VS 2015无关。

在失去了一些晦涩的PowerShell脚本(不是添加的答案)的工作后,我决定创buildcopyright.py 。 用法示例:

 C:\>python copyright.py "C:\users\me\documents\path\to\vsproject" 

它recursion地查找指定目录中的所有* .cs文件,并在它们前面加上版权文本。 其他文本在文件开头是否已经存在并不重要; 它将被删除。

注意: 作为预防措施,您应该在执行此脚本之前始终备份您的代码

@ leniel-macaferi(没有文件名和公司,只是标题)的简单版本的代码:

 param($target = "C:\MyProject") $header = "//----------------------------------------------------------------------------- // Copyright (c) The Corporation. All rights reserved. //----------------------------------------------------------------------------- " function Write-Header ($file) { $content = Get-Content $file $filename = Split-Path -Leaf $file $fileheader = $header Set-Content $file $fileheader Add-Content $file $content } Get-ChildItem $target -Recurse | ? { $_.Extension -like ".cs" } | % ` { Write-Header $_.PSPath.Split(":", 3)[2] } 

要运行,请将代码保存到要recursion迭代的目录中的新文件(例如AddHeader.ps1)中并执行.\AddHeader.ps1 . 从PowerShell窗口。

Interesting Posts