visual studio seguro programacion ponen nombre necesita lenguaje generar ensamblado documentar documentacion crear con como comentarios codigo caracteristicas c# visual-studio-2012 banner copyright-display

c# - seguro - Insertar aviso de copyright/banner en todos los archivos de código fuente en Visual Studio 2012



lenguaje de programacion c# caracteristicas (5)

Después de perder el trabajo con algún script oscuro de PowerShell (no el que se agregó como respuesta), decidí crear copyright.py . Ejemplo de uso:

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

Encuentra recursivamente todos los archivos * .cs en el directorio especificado y los prefije con el texto de copyright. No importa si ya existe otro texto al comienzo del archivo; será eliminado.

Nota: Como precaución, siempre debe hacer una copia de seguridad de su código antes de ejecutar este script

Después de buscar en Google encontré esto: use una macro de Visual Studio para insertar encabezados de derechos de autor en archivos de código fuente . Parecía prometedor:

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

Cuando probé la opción de menú Tools -> Macros ya no estaba allí en VS 2012. Aquí está la prueba: Macros en Visual Studio 11 Developer Preview . Simplemente abandonaron esta funcionalidad. :(

Entonces, tengo curiosidad por saber qué opción podría usar para agregar la información de copyright a todos los archivos de código fuente existentes en mi solución usando Visual Studio 2012. ¿Hay alguna manera estándar de hacerlo, usando un archivo de plantilla (algo relacionado con T4 templates ) o un script de PowerShell ? Podría escribir algún código para iterar sobre los archivos con la extensión .cs y agregar la información de copyright, pero eso no es lo que estoy buscando. Me gustaría saber sobre alguna herramienta para automatizar este proceso.


En caso de que esto siga siendo interesante, existe el complemento del encabezado de licencia que puede agregar un encabezado completamente personalizable a cualquier archivo en la creación. Actualmente, esto funciona con VS2013, pero no (¿todavía?) Con VS 2015.


Puede crear un nuevo fragmento y simplemente escribir cp + doble pestaña para insertar el aviso donde desee (no hace falta decir que puede cambiar la palabra clave a lo que desee).

El único problema es que, según tengo entendido, los fragmentos no son compatibles con las funciones de tiempo, por lo que parece imposible obtener la hora actual de la línea de fecha con esta técnica. Una solución no tan buena para esto es hacer que los campos de tiempo sean editables (similar a cómo funciona el fragmento de mbox) e inserte la hora manualmente.

Aquí hay un ejemplo de cómo se ve un fragmento. El fragmento inferior obtendrá automáticamente el nombre de clase e insertará el aviso de copyright en el lugar donde escribe ''copyright'' y doble pestaña.

Método 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>

Método 2

Además, aquí hay un ejemplo de un programa que puede hacer para hacer eso por usted.

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

Por supuesto, será necesario capturar algunos errores. Pero esto debería darle la idea general de cómo construir una interfaz de usuario a su alrededor y agregar los archivos que desea procesar.

Método 3

También es posible cambiar la plantilla de sus clases que generalmente se puede encontrar en:

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

A veces, editar ItemTemplatesCache también es necesario para mostrar los resultados.

Aquí hay una plantilla de ejemplo basada en su pregunta:

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


Una versión más simple del código de @ leniel-macaferi (sin nombre de archivo y compañía, solo encabezado):

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

Para ejecutarlo, guarde el código en un archivo nuevo (por ejemplo, AddHeader.ps1) en el directorio que desea recorrer ./AddHeader.ps1 . y ejecutar ./AddHeader.ps1 . desde la ventana de PowerShell.


Voy a agregar aquí una secuencia de comandos de PowerShell que encontré en esta publicación: Powershell : secuencia de comandos del generador de encabezados de derechos de autor . Captura lo que tenía en mente antes de publicar la pregunta ...

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

Escribí sobre esto con modificaciones menores para adaptarlo a mis necesidades:

Insertar aviso de copyright / banner / encabezado en todos los archivos de código fuente con PowerShell