範本是指打開 IDE 時,建立專案時所套用到的範本,由於這個章節的目的是將 Sharpdevelop 的專案建立範本移動到 Visual Studio 上,就不需要在 Sharpdevelop 寫 Code ,純做開發就好。
如圖所示,如果要建立 AddIns ,可能就得在 Sharpdevelop 中開發,但如果不想要呢? 你其實還有其他選擇,就是自己做一個 Visual Studio 的 Sharpdevelop AddIns 模板。
由於它的製作過程有點繁複,所以我把我整理過後的範本公開使用:
https://github.com/hpcslag/sp-template-for-visual-studio
標題雖然有冠名工研院 (ITRI) ,但我懶得改,而且裡面的內容並不涉及任何院內智慧財產權,有需要的人可以自己去改裡面的內容。
在上面這個範本集中,要注意的是打開 Items 的 Reference ,請記得增加路徑,指向 Sharpdevelop 的 bin 目錄:
C:\Users\Mac\Desktop\SharpDevelop-5.0.0\bin
本篇只會順帶介紹製作 Sharpdevelop Template 的方式,不一定需要看,只是順邊工商一下我整理的 Template ,裡面自帶一個我預先幫你做好的 AddIns 範本 (能從 Menu 打開一個空白 Form 的外掛範本),方便初學者入門。
製作 Items Template
範本製作最重要的檔案是 .vstemplate ,他決定你按下 Add New Items 之後要給出什麼東西安裝到你的專案。
- Properties 裡面塞的是一個很正常的 AssemblyInfo.cs
- __TemplateIcon.ico 應該是塞錯的檔案... (給 VS 讀的圖片)
- FullFile.png 是給 VS 讀的圖片 (拿 Sharpdevelop 的)
- Class.cs 是樣本程式檔
- ItemTemplate1.vstemplate 是主要的 template 描述檔
(留意 $rootnamespace$ 和 $safeitemrootname$)
using System;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Gui;
namespace $rootnamespace$ //$rootnamespace$ 會套用到要新增的專案的 namespace 中
{
/// <summary>
/// Description of the view content
/// </summary>
public class $safeitemrootname$ : AbstractViewContent //safeitemrootname 會套用到使用者自己輸入的那個名稱
{
/// <summary>
/// The <see cref="System.Windows.Forms.Control"/> representing the view
/// </summary>
public override object Control
{
get
{
//
// TODO : Give back a working Windows.Forms Control
//
return null; //return some view
}
}
/// <summary>
/// Creates a new $safeitemrootname$ object
/// </summary>
public $safeitemrootname$() //safeitemrootname 會套用到使用者自己輸入的那個名稱 (建構子)
{
this.TitleName = "$safeitemrootname$"; //safeitemrootname 會套用到使用者自己輸入的那個名稱
}
/// <summary>
/// Loads a new file into MyView
/// </summary>
/*public override void Load(string fileName)
{
// TODO
throw new System.NotImplementedException();
}
/// <summary>
/// Refreshes the view
/// </summary>
public override void RedrawContent()
{
// TODO: Refresh the whole view control here, renew all resource strings
// Note that you do not need to recreate the control.
}*/
/// <summary>
/// Cleans up all used resources
/// </summary>
public override void Dispose()
{
// TODO: Clean up resources in this method
// Control.Dispose();
base.Dispose();
}
}
}
關於 vstemplate ,它是長這樣的格式:
<?xml version="1.0" encoding="utf-8"?>
<VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" xmlns:sdk="http://schemas.microsoft.com/developer/vstemplate-sdkextension/2010">
<TemplateData>
<Name>[樣板標題]</Name>
<Description>[樣板說明]</Description>
<Icon>[圖片檔位置]</Icon>
<TemplateID>6b648a83-bf04-44c8-bf60-014a7cab5f97</TemplateID>
<ProjectType>CSharp [語言類型]</ProjectType>
<RequiredFrameworkVersion>2.0</RequiredFrameworkVersion>
<NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
<DefaultName>Class.cs [項目檔案名稱]</DefaultName>
</TemplateData>
<TemplateContent>
<References>
<Reference>
<Assembly>System</Assembly>
</Reference>
</References>
<ProjectItem ReplaceParameters="true">Class.cs [項目匯入進來的檔案路徑]</ProjectItem>
</TemplateContent>
</VSTemplate>製作 Project Template
這個 Project 相對簡單一些,結構中也可以包含自動化更改 class name 的 Items 出現,我的專案長這樣:
- Configuration 裡面也是很純的 AssemblyInfo.cs
- MyTemplate.vstemplate 是整個專案的主要描述檔
- MenuCommand.cs 是我一開始就希望加入進來的檔案
- ITRI-AddIn.nuspec 是 nupackege 描述檔
- ITRI-AddIn.csproj 是預設的專案模板
- ITRI-AddIn.addin 是 Sharpdevelop 專用的外掛描述檔
- 剩下的 Image 是給 VS 讀取預覽圖用的
關於 MyTemplate.vstemplate ,它是長這樣的:
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
<Name>[專案檔標題]</Name>
<Description>[專案檔說明]</Description>
<ProjectType>CSharp [專案檔語言類形]</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>ITRI - AddIn [預設專案名稱]</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>__TemplateIcon.png [預覽 ICON]</Icon>
<PreviewImage>__PreviewImage.png [預覽圖片]</PreviewImage>
</TemplateData>
<TemplateContent>
<Project TargetFileName="ITRI-AddIn.csproj" File="ITRI-AddIn.csproj" ReplaceParameters="true">
<ProjectItem ReplaceParameters="true" TargetFileName="AddInWritingHelp.txt [要增加的檔案的 Path ]">AddInWritingHelp.txt [要增加的檔案]</ProjectItem>
<Folder Name="Configuration" TargetFolderName="Configuration">
<ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters="true" TargetFileName="ITRI-AddIn.addin">ITRI-AddIn.addin</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="ITRI-AddIn.nuspec">ITRI-AddIn.nuspec</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="MenuCommand.cs">MenuCommand.cs</ProjectItem>
</Project>
</TemplateContent>
</VSTemplate>然後關於 .csproj 的部分,只擷取一些,這個 .csproj 可以從 VS 打開,並且需要把每一個引用入徑都改成相對路徑,像下面這樣:
部分顯示...
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>..\..\..\..\AddIns\Misc\$safeprojectname$\</OutputPath>
<DebugSymbols>True</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>打包
打包的目的是讓 VS 可以正常匯入,直接把整個目錄包成 zip,放在 item/project template 目錄底下就可以了。
把這些檔案分別丟到【我的文件】中 Visual Studio 的 Templates 底下各 Project / Item 資料夾中,然後如果你是 VS 2019 的用戶,可能需要執行清空指令,才能看到 Template:Reference:
有興趣可自行參考 VSIX 範本說明:
https://docs.microsoft.com/en-us/visualstudio/extensibility/creating-custom-project-and-item-templates?view=vs-2019
沒有留言:
張貼留言