首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Visual Studio 專案範本注入版權標頭 — 讓每個新檔案自動包含公司版權、作者、建立時間

     編輯:關於.NET

前言

團隊開發規範常要求每個原始碼檔案頂端包含版權宣告、作者、建立日期等資訊。手動複製貼上不僅繁瑣,日期、檔名更難維持正確。Visual Studio 透過專案項目範本機制,可在 Add New Item** 對話框建立檔案時自動注入動態資訊。本文詳細說明範本位置、參數語法、多語言支援與團隊部署方式。

範本檔案位置

Visual Studio 版本範本快取目錄 (預設)
VS 2005/2008%ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE\ItemTemplatesCache
VS 2010%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplatesCache
VS 2012%ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplatesCache
VS 2013%ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache
VS 2015/2017/2019/2022%ProgramFiles%\Microsoft Visual Studio\<版本>\<版本>\Common7\IDE\ItemTemplatesCache
實際路徑可能因安裝自訂而異,建議在 VS 中執行 Tools → Options → Projects and Solutions → General → User project templates location 查看。

目標範本檔案結構

ItemTemplatesCache
├── CSharp
│   └── 1033 (或 2052 繁體中文)
│       ├── Class.zip
│       │   └── Class.cs          ← 類別檔案範本
│       ├── Interface.zip
│       │   └── Interface.cs
│       ├── CodeFile.zip
│       │   └── CodeFile.cs
│       └── ... (所有 C# 項目類型)
├── VisualBasic
│   └── 1033
│       └── Class.zip ...
└── Web
    └── CSharp
        └── 1033
            ├── WebForm.zip
            ├── MasterPage.zip
            └── ...

修改 Class.cs 範本 — 完整範例

  1. 解壓縮 Class.zip
  2. 編輯 Class.cs
  3. 壓縮回 Class.zip (保持結構)
  4. 重啟 Visual Studio

//------------------------------------------------------------------------------
// 
//     Copyright (C) $year$ $registeredorganization$. All rights reserved.
// 
// $username$
// $time$
// $safeitemrootname$ 類別說明
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace $rootnamespace$
{
    /// 
    /// $safeitemrootname$ 類別
    /// 
    public class $safeitemrootname$
    {
    }
}

關鍵範本參數對照表

參數說明範例輸出
$safeitemrootname$安全的項目名稱 (移除非法字元)MyClass
$safeitemname$完整項目名稱 (含副檔名)MyClass.cs
$rootnamespace$專案預設命名空間MyCompany.MyProject
$registeredorganization$VS 註冊組織名稱 (Tools → Options → Environment → User name)My Company Inc.
$username$目前登入使用者名稱john.doe
$year$當年年份 (4 位數)2024
$time$目前時間 (依系統格式)2024/03/15 14:30:22
$date$目前日期2024/03/15
$machinename$電腦名稱DEV-WS-01
$clrversion$CLR 版本4.0.30319.42000
$guid1$ ~ $guid10$自動產生 GUIDa1b2c3d4-e5f6-7890...
$projectname$專案名稱MyProject

多語言 / 多項目類型批次修改

需同步修改以下常用範本:

  • CSharp\\Class.zip\Class.cs
  • CSharp\\Interface.zip\Interface.cs
  • CSharp\\CodeFile.zip\CodeFile.cs
  • CSharp\\Struct.zip\Struct.cs
  • CSharp\\Enum.zip\Enum.cs
  • Web\CSharp\\WebForm.zip\WebForm.aspx.cs
  • Web\CSharp\\MasterPage.zip\MasterPage.master.cs
  • VisualBasic\\Class.zip\Class.vb (VB 語法調整)

團隊部署最佳實務:不要直接改機器範本

直接修改 ItemTemplatesCache 有風險:VS 更新會覆蓋、團隊成員機器不一致、CI 伺服器無效。建議採用專案層級範本或側載擴充套件:

方案 A:專案項目範本 (.zip 放在專案內)

  1. 專案根目錄建立 Templates\ItemTemplates\CSharp\1033\Class.zip
  2. .csproj 加入:
    <PropertyGroup>
      <ItemTemplateDirs>$(MSBuildThisFileDirectory)Templates\ItemTemplates</ItemTemplateDirs>
    </PropertyGroup>
    
  3. 或使用 dotnet new -i 安裝自訂範本包 (現代 .NET Core/5+ 專案)

方案 B:VSIX 擴充套件 (推薦企業級)

  1. 建立 VSIX Project (需 Visual Studio SDK)
  2. 加入 Item Template 專案項目
  3. 編輯 .vstemplate 設定 TemplateID、TemplateGroupID
  4. 建置輸出 .vsix,團隊統一安裝或透過群組原則推送

方案 C:EditorConfig + Code Style (現代替代)

.NET Core 3.0+ / VS 2019+ 支援 .editorconfig 規範檔案標頭:


# .editorconfig
[*.cs]
file_header_template = copyright
copyright_header = // Copyright (C) {year} {organization}. All rights reserved.// Author: {author}// Date: {date}
需安裝 Microsoft.VisualStudio.EditorConfig 擴充功能,且僅支援靜態文字,無法動態注入 $username$、$time$ 等參數。

驗證與測試

  1. 重啟 Visual Studio
  2. 專案右鍵 → Add → New Item → Class
  3. 命名 TestClass.cs → Add
  4. 確認檔案頂端自動出現版權標頭、類別名稱、命名空間、作者、日期皆正確

常見問題 FAQ

  1. Q: 修改後不生效?
    A: 必須重啟 VS;若仍無效,檢查 ItemTemplatesCache 是否為唯讀、或 VS 實際讀取路徑不同 (查看 Tools → Options → Projects → User item templates location)。
  2. Q: $time$ 格式不符預期?
    A: $time$ 依系統地區設定 (Control Panel → Region)。若需固定格式,可在範本中寫死 // Created: $date$ $time$ 並接受系統格式,或改用 .editorconfig 靜態標頭。
  3. Q: 團隊成員 VS 版本不同 (2019/2022)?
    A: 採用方案 A (專案層級範本) 或方案 B (VSIX),避免機器級差異。
  4. Q: 如何在標頭包含檔案用途描述?
    A: 範本加入 // $safeitemrootname$ 功能說明,建立時手動補充,或建立自訂精靈 (Wizard) 彈窗輸入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved