si potrebbe creare un nuovo frammento di e proprio tipo di CP + doppia scheda per inserire l'avviso in cui si desidera (inutile dire che si può cambiare la parola chiave per quello che vuoi).
L'unico problema con esso è, da quello che so, i frammenti non supportano le funzioni temporali, quindi ottenere l'ora corrente per la data line sembra impossibile con questa tecnica. Una soluzione non molto buona per questo è rendere i campi temporali modificabili (simile a come funziona lo snippet di mbox) e inserire semplicemente l'ora manualmente.
Ecco un esempio di come appare uno snippet. Il bellow snippet otterrà automaticamente il nome della classe e inserirà l'avviso sul copyright nel posto in cui digiti "copyright" e doppia scheda.
Metodo 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>
Metodo 2
Inoltre, ecco un esempio di un programma che si può fare per farlo per voi.
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);
}
Ovviamente è richiesto un errore di cattura. Ma questo dovrebbe darti l'idea generale su come costruire un'interfaccia utente attorno ad essa e aggiungere i file che vorrai elaborare.
Metodo 3
E 'anche possibile modificare il modello per le classi che possono essere essere di solito sotto:
C:\Program Files (x86)\Microsoft Visual Studio <version>\Common7\IDE\ItemTemplates\CSharp\1033\
A volte la modifica ItemTemplatesCache è anche necessario per visualizzare i risultati.
Ecco un modello di esempio in base alla tua domanda:
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$
{
}
}
Si può usare una fase di pre/post build che esegue uno script PowerShell che controlla se ogni file CS ha una determinata intestazione e lo antepone se no? – PhonicUK
@PhonicUK: questa sarebbe una buona opzione. Non sono esperto di PowerShell. :) –
Oppure scrivi una piccola app C# che esegue invece questa ed eseguila? – PhonicUK