• C#,C++修改vs文件模板,添加自定义代码版权版本信息


    简单型的修改类似该路径下的模板文件即可(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
        {
        }
    }
    View Code

    @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

  • 相关阅读:
    洛谷 P1414 又是毕业季II Label:None
    洛谷 P1372 又是毕业季I Label:None
    洛谷 P1111 修复公路 Label:并查集
    高精度特别策划 加减乘除余~~~
    洛谷 P1967 货车运输 Label: 倍增LCA && 最小瓶颈路
    数组指针和指针数组的区别
    堆和栈的区别
    JAVA8 十大新特性详解
    自己在菜单栏中加了一项打开文件的菜单后窗口不刷新 单击才刷新
    Windows 7 OpenGL配置
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/5826978.html
Copyright © 2020-2023  润新知