前幾篇較偏理論,從本文開始介紹 Add-In 中對 VS 核心元素的實際操作,精彩度大增。日常開發從開啟方案開始,再找專案、開檔案編碼。本文即圍繞此流程展開。
這三者對 .NET 開發者再熟悉不過,但 AOM 表達方式與直覺不同。關鍵對應:
Solution 介面 → 方案Project 介面 → 方案資料夾 與 專案ProjectItem 介面 → 資料夾 與 檔案實際開發常依特定架構(如 iBATIS.NET 的 NPetshop),包含多專案、組件、配置檔組織。專案啟動時搭建框架耗時,透過 Add-In 可做到「一次編寫,多次使用」。以 NPetshop 結構為例:

建立流程:

提取通用方法(GetCulturedMenuName、GetCommandFullName、GetCommandBarByName、AddNamedCommand2),簡化後續命令註冊。
使用者輸入方案名稱與目錄(專案名以此為前綴),透簡單表單收集:

Solution3 關鍵方法:Create()、AddSolutionFolder()、AddFromTemplate()、SaveAs() 等。建立空方案:
Solution3 sln = (DTEObject.Solution as Solution3);
sln.Create(currentSlnPath, slnName);
呼叫 Create 後 VS 會自動開啟新方案。
先複製所需組件至新方案目錄,再建立方案資料夾並加入檔案:
Project sfProj = sln.AddSolutionFolder(ExternalBinDirectoryName);
foreach (string file in Directory.GetFiles(ExternalBinPath))
sfProj.ProjectItems.AddFromFile(file);
方案資料夾視為一種 Project,透過 ProjectItems 加入檔案。
順序:Domain → Persistence → Service → Presentation → Web。Project 關鍵成員:ProjectItems、Kind、References。
建立 Domain(類別庫專案):
string classLibProjTemplatePath = sln.GetProjectTemplate("ClassLibrary.zip", "CSharp");
string domainProjName = slnName + "." + "Domain";
sln.AddFromTemplate(classLibProjTemplatePath, Path.Combine(currentSlnPath, domainProjName), domainProjName, false);
Project domainProj = GetProjectByName(sln, domainProjName);
VSProject vsDomainProj = domainProj.Object as VSProject;
vsDomainProj.References.Add(Path.Combine(ExternalBinPath, "IBatisNet.Common.dll"));
AddFromTemplate 對 C#/VB.NET 回傳 null,需自行用 GetProjectByName 查找。加入組件參考用 VSProject.References.Add。
Persistence 同理,但加入專案參考用 References.AddProject(domainProj)。Service、Presentation 類同。Web 專案用 WebApplicationProject.zip 模板。
ProjectItem 統一表達資料夾與檔案。關鍵方法:AddFolder、AddFromFileCopy、AddFromTemplate。
webProj.ProjectItems.AddFolder("Maps", Constants.vsProjectItemKindPhysicalFolder);
webProj.ProjectItems.AddFromFileCopy(Path.Combine(GetAddinPath(), @"ibatis-config\dao.config"));
string templatePath = sln.GetProjectItemTemplate("Interface.zip", "CSharp");
webProj.ProjectItems.AddFromTemplate(templatePath, "MyInterface.cs");
至此完成具備初步功能的代碼產生器。
方案、專案、檔案(夾)是 VS 基本組織形式,本文介紹自上而下建立它們的操作,並以 NPetshop 產生器示範。注意:本文未涉及方案總管操作與檔案內容操作,將在後續文章介紹。
出處:原文連結
程式碼下載:範例程式碼