it-swarm.com.de

Einfügen eines Copyright-Hinweises/-banners in alle Quellcodedateien in Visual Studio 2012

Nach einigem Googeln habe ich Folgendes gefunden: Verwenden Sie ein Visual Studio-Makro, um Copyright-Header in Quelldateien einzufügen . Es sah vielversprechend aus:

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

Als ich Tools -> Macros menu option ausprobierte, war es in VS 2012 nicht mehr vorhanden. Hier ist der Beweis: Makros in Visual Studio 11 Developer Preview . Sie haben diese Funktionalität einfach fallen gelassen. :(

Ich bin also nur neugierig, welche Option ich verwenden könnte, um die Copyright-Informationen zu allen vorhandenen Quellcodedateien in meiner Lösung mithilfe von Visual Studio 2012 hinzuzufügen T4 templates) oder ein PowerShell-Skript? Ich könnte etwas Code schreiben, um die Dateien mit der Erweiterung .cs zu durchlaufen und die Copyright-Informationen hinzuzufügen. Dies ist jedoch nicht das, was ich suche. Ich würde gerne etwas über ein Werkzeug erfahren, um diesen Prozess zu automatisieren.

39

Sie können ein neues Snippet erstellen und einfach cp + double tab eingeben, um die Benachrichtigung dort einzufügen, wo Sie möchten (es ist unnötig zu erwähnen, dass Sie das Stichwort beliebig ändern können).

Das einzige Problem dabei ist, dass Snippets, soweit mir bekannt ist, keine Zeitfunktionen unterstützen. Daher ist es mit dieser Technik unmöglich, die aktuelle Uhrzeit für Ihre Datumsgrenze zu ermitteln. Eine nicht so gute Lösung für dieses Problem besteht darin, die Zeitfelder bearbeitbar zu machen (ähnlich wie das Mbox-Snippet funktioniert) und die Zeit manuell einzufügen.

Hier ist ein Beispiel, wie ein Snippet aussieht. Das unten abgebildete Snippet erhält automatisch den Klassennamen und fügt den Copyright-Hinweis an der Stelle ein, an der Sie 'copyright' und eine doppelte Registerkarte eingeben.

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

Methode 2

Hier ist auch ein Beispiel eines Programms, das Sie erstellen können, um das für Sie zu tun.

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

Einige Fehler werden natürlich erforderlich sein. Dies sollte Ihnen jedoch die allgemeine Idee geben, wie Sie eine Benutzeroberfläche erstellen und die Dateien hinzufügen, die Sie verarbeiten möchten.

Methode 3

Es ist auch möglich, die Vorlage für Ihre Klassen zu ändern, die Sie normalerweise finden können unter:

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

Manchmal ist auch das Bearbeiten von ItemTemplatesCache erforderlich, um die Ergebnisse anzuzeigen.

Hier ist eine Beispielvorlage, die auf Ihrer Frage basiert:

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

Ich füge hier ein PowerShell-Skript hinzu, das ich in diesem Beitrag gefunden habe: Powershell - Copyright-Header-Generator-Skript . Es erfasst, was ich vor der Veröffentlichung der Frage im Sinn hatte ...

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]
}

Ich habe darüber mit kleinen Modifikationen geschrieben, um es an meine Bedürfnisse anzupassen:

Copyright-Hinweis/Banner/Header in alle Quellcodedateien mit PowerShell einfügen

21

Sollte dies dennoch interessant sein, gibt es das License-Header-Plugin , das jeder Datei bei der Erstellung einen vollständig anpassbaren Header hinzufügen kann. Derzeit funktioniert dies mit VS2013, aber nicht (noch?) Mit VS 2015.

7
Thaoden

Nachdem ich die Arbeit durch ein obskures PowerShell-Skript (nicht das als Antwort hinzugefügte) verloren hatte, entschied ich mich, copyright.py zu erstellen. Verwendungsbeispiel:

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

Er sucht rekursiv alle * .cs-Dateien im angegebenen Verzeichnis und fügt ihnen den Copyright-Text ein. Es ist egal, ob bereits am Anfang der Datei ein anderer Text vorhanden ist. es wird entfernt. 

Hinweis: _ ​​Als Vorsichtsmaßnahme sollten Sie vor der Ausführung dieses Skripts immer eine Sicherungskopie des Codes erstellen

2
Pakman

Eine einfachere Version des Codes von @ leniel-macaferi (ohne Dateinamen und Firma, nur Kopfzeile):

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]
}

Speichern Sie zum Ausführen den Code in einer neuen Datei (z. B. AddHeader.ps1) in dem Verzeichnis, in dem Sie rekursiv durchlaufen möchten, und führen Sie .\AddHeader.ps1 . im PowerShell-Fenster aus.

0
Nikita G.