c# - 在 Visual Studio 2012 中的所有源代码文件中插入版权声明/横幅

标签 c# visual-studio-2012 banner copyright-display

谷歌搜索后我发现了这个:Use a Visual Studio Macro to Insert Copyright Headers into Source Files .它看起来很有希望:

// <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 中不再存在。证据如下:Macros in Visual Studio 11 Developer Preview .他们只是放弃了这个功能。 :(

所以,我只是想知道我可以使用哪个选项将版权信息添加到我使用 Visual Studio 2012 的解决方案中的所有现有源代码文件。是否有任何标准方法可以使用模板文件 (与T4 模板) 或PowerShell 脚本相关的内容?我可以编写一些代码来遍历具有 .cs 扩展名的文件并添加版权信息,但这不是我想要的。我想了解一些可以自动执行此过程的工具。

最佳答案

您可以创建一个新的代码段,只需键入 cp + 双制表符即可在您想要的位置插入通知(不用说,您可以将关键字更改为任何您想要的)。

唯一的问题是,据我所知,片段不支持时间函数,因此使用此技术获取日期行的当前时间似乎是不可能的。一个不太好的解决方法是使时间字段可编辑(类似于 mbox 代码段的工作方式)并手动插入时间。

下面是一个片段的外观示例。下面的代码片段将自动获取类名,并在您键入“版权”和双制表符的地方插入版权声明。

方法一

 <?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>

方法二

另外,这里有一个程序示例,您可以编写一个程序来为您执行此操作。

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

当然需要一些错误捕获。但这应该让您大致了解如何围绕它构建 UI 并添加您要处理的文件。

方法三

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

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$
    {
    }
}

关于c# - 在 Visual Studio 2012 中的所有源代码文件中插入版权声明/横幅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199409/

相关文章:

c# - 在 UWP 中获取 map 上元素的像素坐标

javascript - Fetch API - 状态为 200 的 GET 请求返回空正文

c# - .NET 3.5 JIT 在运行应用程序时不起作用

vb.net - 调试触发构建错误(未找到文件)和防病毒程序,Visual Basic (V11 2012)

c++ - Qt - 如何在对话框上张贴横幅?

ios - 安装 adMob 横幅给我奇怪的 Mach-O 链接器错误

c# - 如何保护 OAuth key 不被用户反编译我的项目?

visual-studio-2010 - ReSharper添加二进制引用而不是项目引用

unit-testing - 类型或命名空间名称 'VisualStudio' 在命名空间 'Microsoft' 中不存在

php - 创建横幅交换算法以旋转广告