團隊開發規範常要求每個原始碼檔案頂端包含版權宣告、作者、建立日期等資訊。手動複製貼上不僅繁瑣,日期、檔名更難維持正確。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.zipClass.csClass.zip (保持結構)
//------------------------------------------------------------------------------
//
// 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$ | 自動產生 GUID | a1b2c3d4-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 伺服器無效。建議採用專案層級範本或側載擴充套件:
Templates\ItemTemplates\CSharp\1033\Class.zip.csproj 加入:
<PropertyGroup>
<ItemTemplateDirs>$(MSBuildThisFileDirectory)Templates\ItemTemplates</ItemTemplateDirs>
</PropertyGroup>
dotnet new -i 安裝自訂範本包 (現代 .NET Core/5+ 專案).vstemplate 設定 TemplateID、TemplateGroupID.vsix,團隊統一安裝或透過群組原則推送.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$ 等參數。
TestClass.cs → AddItemTemplatesCache 是否為唯讀、或 VS 實際讀取路徑不同 (查看 Tools → Options → Projects → User item templates location)。// Created: $date$ $time$ 並接受系統格式,或改用 .editorconfig 靜態標頭。// $safeitemrootname$ 功能說明 ,建立時手動補充,或建立自訂精靈 (Wizard) 彈窗輸入。