简单型的修改类似该路径下的模板文件即可(vs版本或安装路径不同路径可能不同)
C#:
模板参数参考https://msdn.microsoft.com/zh-cn/library/eehb4faa.aspx
<path>Microsoft Visual Studio 12.0Common7IDEItemTemplates[Cache]CSharpCode2052ClassClass.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 项目数 = 1
4.修改模板文件
<path>Microsoft Visual Studio 12.0Common7IDEItemTemplates[Cache]CSharpCode2052ClassClass.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$值是微软的。
读的是HKLMSoftwareMicrosoftWindows NTCurrentVersionRegisteredOrganization项值,我想改,不敢改,怕出错。
更可取的方式是自定义一个。
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:" + " " + DTE.ActiveDocument.Name DocSel.NewLine() DocSel.Text = " * Copyright:" + " " + "XX Co., Ltd." DocSel.NewLine() DocSel.Text = " * Description:" + " " + "" DocSel.NewLine() DocSel.Text = " * @author:" + " " + "wjshan0808" DocSel.NewLine() DocSel.Text = " * @version" + " " + "" + 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" + " " + 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.0VCvcprojectitemshfile.h <path>Microsoft Visual Studio 10.0VCvcprojectitems ewc++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