C#,C++修改vs文件模板,添加自定义代码版权版本信息
简单型的修改类似该路径下的模板文件即可(vs版本或安装路径不同路径可能不同)
C#:
模板参数参考https://msdn.microsoft.com/zh-cn/library/eehb4faa.aspx
<path>\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates[Cache]\CSharp\Code\2052\Class\Class.cs
例如添加如下内容
/**************************************************************
* Filename: $safeitemrootname$.cs
* Copyright: $registeredorganization$ Co., Ltd.
*
* Description: $safeitemrootname$ ClassFile.
*
* @author: wjshan0808
* @version $time$ @Reviser Initial Version
**************************************************************/
$time$参数的值太长,不合适,如果有$date$最好,可惜默认的没有,那就来添加一个.
步骤:
1.创建强命名程序集
using System;
using System.Collections.Generic;
//添加程序集引用
// Microsoft.VisualStudio.TemplateWizardInterface.dll
// EnvDTE.dll
//
using Microsoft.VisualStudio.TemplateWizard;
using EnvDTE; namespace CustomParameter
{
//IWizard 接口说明
//https://msdn.microsoft.com/zh-cn/library/microsoft.visualstudio.templatewizard.iwizard(v=vs.80).aspx public class CustomParameters : IWizard
{
public void RunFinished()
{
//throw new NotImplementedException();
} public void RunStarted(object automationObject, System.Collections.Generic.Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
try
{
//添加自定义模板参数 Date
string key = "$Date$";
if (replacementsDictionary.ContainsKey(key))
replacementsDictionary.Remove(key);
replacementsDictionary.Add(key, System.DateTime.Now.ToString("MM/dd/yyyy"));
//可以扩展一个修订者
//string extendKey = "Reviser";
//if (replacementsDictionary.ContainsKey(extendKey))
// replacementsDictionary.Remove(extendKey);
//replacementsDictionary.Add(extendKey, "[弹窗/读文件/...]获取信息");
}
catch (Exception ex)
{ }
}
// This method is only called for item templates,
// not for project templates.
public bool ShouldAddProjectItem(string filePath)
{
return true;
} public void BeforeOpeningFile(EnvDTE.ProjectItem projectItem)
{
//throw new NotImplementedException();
} public void ProjectFinishedGenerating(EnvDTE.Project project)
{
//throw new NotImplementedException();
} public void ProjectItemFinishedGenerating(EnvDTE.ProjectItem projectItem)
{
//throw new NotImplementedException();
}
}
}
可以用sn工具生成.snk文件,也可以左键项目属性->签名创建.snk文件。
项目文件AssemblyInfo.cs中添加snk文件
[assembly: AssemblyKeyFile("CustomParameter.snk")]
/keyfile: https://msdn.microsoft.com/zh-cn/library/wb84w704.aspx
此操作会出现 <...使用命令行选项“/keyfile”或适当的项目设置代替“AssemblyKeyFile”...>警告,消除警告重新回到属性签名选择生成的snk即可。
使用开发人员命令提示工具
提取公钥到CustomParameter.psnk
>sn -p CustomParameter.snk CustomParameter.psnk
查看公钥信息
>sn -tp CustomParameter.psnk
2.部署到GAC(global assembly cache)
使用管理员身份运行开发人员命令提示工具然后使用GACUtil工具部署程序集
>GACUtil /i CustomParameter.dll
成功标记:程序集已成功添加到缓存中。
程序集卸载(如果代码更新出错什么的..!)
>gacutil /u CustomParameter,Version=1.0.0.0,Culture=Neutral,PublicKeyToken=1d6512175a2e39a6
重新安装
>GACUtil /i CustomParameter.dll /f
3.查看程序集信息
>gacutil /l CustomParameter
全局程序集缓存包含下列程序集:
CustomParameter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1d6512175a2e39a6, processorArchitecture=MSIL 项目数 =
4.修改模板文件
<path>\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates[Cache]\CSharp\Code\\Class\Class.vstemplate
参考:https://msdn.microsoft.com/zh-cn/library/ms185301.aspx
添加程序集块
<WizardExtension>
<Assembly>CustomParameter, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=1d6512175a2e39a6</Assembly>
<FullClassName>CustomParameter.CustomParameters</FullClassName>
</WizardExtension>
到此看看效果
/**************************************************************
* Filename: Class2.cs
* Copyright: Microsoft Co., Ltd.
*
* Description: Class2 ClassFile.
*
* @author: wjshan0808
* @version 09/01/2016 @Reviser Initial Version
**************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Class2
{
}
}
@Reviser修订者值可以加一个自定义参数值
</TemplateContent>
。。。
<CustomParameters>
<CustomParameter Name="@Reviser" Value="wjshan0808"/>
</CustomParameters>
</TemplateContent>
$registeredorganization$值是微软的。
读的是HKLM\Software\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization项值,我想改,不敢改,怕出错。
更可取的方式是自定义一个。
C++:
vs低版本可以用宏,我的2010看网上的教程用宏结果没效果,因为不懂VB,也不懂宏,不知道怎么解决了。先把代码记下。
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics Public Module Comments
Public Sub FileSign()
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection '活动点移到文件开头
DTE.ActiveDocument.Selection.StartOfDocument() DocSel.Text = "/**************************************************************"
DocSel.NewLine()
DocSel.Text = " * Filename:" + "\t" + DTE.ActiveDocument.Name
DocSel.NewLine()
DocSel.Text = " * Copyright:" + "\t" + "XX Co., Ltd."
DocSel.NewLine()
DocSel.Text = " * Description:" + "\t" + ""
DocSel.NewLine()
DocSel.Text = " * @author:" + "\t" + "wjshan0808"
DocSel.NewLine()
DocSel.Text = " * @version" + "\t" + "" + Date.Today.ToString("MM/dd/yyyy") + " wjshan0808 Initial Version"
DocSel.NewLine()
DocSel.Text = " *@"
DocSel.Text = " **************************************************************/"
DocSel.NewLine()
DocSel.NewLine()
End Sub Public Sub FuncSign()
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.NewLine()
DocSel.Text = "/**************************************************************"
DocSel.NewLine()
DocSel.Text = " * Description."
DocSel.NewLine()
DocSel.Text = " * "
DocSel.NewLine()
DocSel.Text = " * @param -[in,out] Type name: [commet]"
DocSel.NewLine()
DocSel.Text = " * @return Value"
DocSel.NewLine()
DocSel.Text = " * "
DocSel.NewLine()
DocSel.Text = " * @version" + "\t" + Date.Today.ToString("MM/dd/yyyy") + " wjshan0808 Initial Version"
DocSel.NewLine()
DocSel.Text = " **************************************************************/"
End Sub End Module
最终用了个折中的方式,修改了新建C++.h.cpp文件,添加了个非智能的版本信息注释,再用工具做方法的注释
<path>\Microsoft Visual Studio 10.0\VC\vcprojectitems\hfile.h
<path>\Microsoft Visual Studio 10.0\VC\vcprojectitems\newc++file.cpp
这样的
/**************************************************************
* Filename: @OutputName.cpp
* Copyright: @Company Co., Ltd.
*
* Description: 模板测试源文件.
*
* @author: @Author
* @version @MM/@dd/@yyyy @Reviser Initial Version
**************************************************************/ #pragma once #include <iostream>
#include <cmath>
#include <cstdlib> using namespace std; className::className()
{ } className::~className()
{ } /**
* 测试方法.
*
* @param -[in,out] char* pName: [测试参数]
*
* @return 0.
*
* @version 09/01/2016 @reviser Initial Version
*/
long className::Test(char* pName)
{ }
/**************************************************************
* Filename: @OutputName.h
* Copyright: @Company Co., Ltd.
*
* Description: 模板测试头文件.
*
* @author: @Author
* @version @MM/@dd/@yyyy @Reviser Initial Version
**************************************************************/ #pragma once #include <stdio.h> class className //: public baseClass
{
//private:
int m_Test; public:
className();
virtual ~className(); public:
long Test(char* pName); protected:
bool m_Ok; };
用第三方工具推荐一个收费的http://www.atomineerutils.com/download.php,试了一下挺好用。可惜收费。
项目文档模板代码 http://pan.baidu.com/s/1eSC1a0a
C#,C++修改vs文件模板,添加自定义代码版权版本信息的更多相关文章
- vs2017创建文件模板(自动添加创建信息:创建者,创建日期等信息)
很多小伙伴在创建新的类的时候都要都要手动写类的注释,如作者名称.创建日期.版本等等,当有几个类的时候还可以手动写写,但有几十个或者更多的类的时候就麻烦了,所以我们可以设定Visual Studio 2 ...
- 根据.MDF文件查看 SQL数据库的版本信息
http://www.cnblogs.com/eason-chan/p/3695753.html?utm_source=tuicool 手上有 经理带来的一个教学管理系统,由于不知道开发环境,在向SQ ...
- 基本上,把switch,用设计模式代替,肯定是bug和过度设计。想想,本来修改一个文件几行代码可以解决的问题,变成修改3-6个类才能实现一样的功能。不是傻是什么?
那些迷信设计模式的人,来修改一下这个方法吧.看看你最终的代码膨胀为几倍... public virtual PasswordChangeResult ChangePassword(ChangePass ...
- 如何修改win7文件夹的显示方式为详细信息
1.首先对着空白处,鼠标右键单击,然后点击“排列方式” 选一个 还有 你还可以点击“查看” 选择图标大小.详细信息.平铺.列表 等2.点击我的电脑左上角的 组织 按钮 随后选择“文件夹和搜索选项” 再 ...
- pycharm 修改新建文件时的头部模板(默认为__author__='...')
pycharm 修改新建文件时的头部模板 默认为__author__='...' [省略号是默认你的计算机名] 修改这个作者名的步骤: 依次点击:File->Settings->Ed ...
- 修改servlet的模板代码
实际开发中,这些生成的代码和注释一般我们都用不到的,每次都要手工删除这些注释和代码,很麻烦.下面以MyEclipse 2014(其实版本通用的,都可以修改)为例进行说明如何修改Servlet的模板代码 ...
- pycharm 修改新建文件时的头部模板
pycharm 修改新建文件时的头部模板 默认为__author__='...' [省略号是默认你的计算机名] 修改这个作者名的步骤: 依次点击:File->Settings->Edito ...
- 按模板批量修改Excel文件内容
Sub 按模板修改Excel文件() Dim MoBanWorkBook As Workbook Set MoBanWorkBook = Application.ActiveWorkbook Dim ...
- java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码
java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码 作者:Vashon package com.ywx.batchrename; import java.io.File; import ...
随机推荐
- requirejs的用法(二)
这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...
- 诡异的C语言实参求值顺序
学了这么久的C语言,竟然第一次碰到这么诡异的实参求值顺序问题,大跌眼镜.果然阅读面太少了! #include<iostream> void foo(int a, int b, int c) ...
- Node.js实现CORS跨域资源共享
什么是CORS CORS(Cross-origin resource sharing),跨域资源共享,是一份浏览器技术的规范,用来避开浏览器的同源策略 简单来说就是解决跨域问题的除了jsonp外的另一 ...
- 【转载】Linux 信号列表
转自:http://blog.csdn.net/muge0913/article/details/7322710 信号及其简介 信号是一种进程通信的方法,他应用于异步事件的处理.信号的实现是一种软中断 ...
- Spring-AOP面向切面编程
AOP是面向切面编程,区别于oop,面向对象,一个是横向的,一个是纵向. 主要解决代码分散和混乱的问题. 1.概念: 切面:实现AOP共有的类 通知:切面类中实现切面功能的方法 连接点:程序被通知的特 ...
- HDU1671 字典树
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 谢欣伦 - OpenDev原创教程 - 本地IP查找类CxLocalHostIPAddrFind
这是一个精练的本地IP查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxLocalHostIPAddrFind的使用如下: ...
- Tomcat学习记录
阅读摘录如下: 本质 Tomcat最本质就是个能运行JSP/Servlet的Web服务器 , 因此最典型的应用就是用户通过浏览器访问服务器,Tomcat接收到请求后转发给Servlet,由Servle ...
- Apache Spark技术实战之9 -- 日志级别修改
摘要 在学习使用Spark的过程中,总是想对内部运行过程作深入的了解,其中DEBUG和TRACE级别的日志可以为我们提供详细和有用的信息,那么如何进行合理设置呢,不复杂但也绝不是将一个INFO换为TR ...
- eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN
eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错?java. ...