| 一、功能描述項(xiàng)目中有一個(gè)AppSettings.xml文件,當(dāng)這個(gè)文件有添加新元素的時(shí)候,將該添加的內(nèi)容自動(dòng)同步到其他目錄下的AppSettings.xml文件。 二、插件模板選擇要開(kāi)發(fā)VS插件需要安裝SDK,安裝后在添加新項(xiàng)目->Visal C#->擴(kuò)展性下選擇要使用的插件模板,由于本功能是跟文本編輯有關(guān)的,所以選擇Editor Text Adornment模板,也可以選擇其他的模板進(jìn)行開(kāi)發(fā)。下面是兩個(gè)插件的示例:Visual Studio Text Editor Extension和Building and publishing an extension for Visual Studio 2010 三、如何監(jiān)控編輯窗口的保存事件可以通過(guò)ServiceProvider.GlobalProvider.GetService(Type type)方法來(lái)獲取DTE對(duì)象,要獲取該對(duì)象需要添加EnvDTE和Microsoft.VisualStudio.Shell.12.0程序集,這兩個(gè)程序集在【擴(kuò)展】項(xiàng)里,引用Microsoft.VisualStudio.Shell.12.0程序集的時(shí)候還需要添加該程序集依賴的其他程序集,編譯的時(shí)候可以知道需要添加哪些程序集。獲取DTE對(duì)象后可以訂閱DocumentEvemts對(duì)象的DocumentSaved事件。注意:要將DTE、Events、DocumentEvents這三個(gè)對(duì)象定義為全局變量,否則定義的事件不會(huì)生效,這是由于C#的垃圾回收機(jī)制造成的。 一下是關(guān)于如何獲取DTE對(duì)象和訂閱DocumentSaved事件的教程:Walkthrough: Accessing the DTE Object from an Editor Extension、VSIX Tutorial-Visual Studio events and Commands 四、在插件里彈出模態(tài)對(duì)話框Modal Dialog Boxes for Visual Studio Extensions這是msdn上關(guān)于如何彈出模態(tài)窗口的教程,也可以直接使用WinForm窗口。在我開(kāi)發(fā)的插件里就是直接使用WinForm窗體。 五、Editor模板下如何在工具->選項(xiàng)里添加選項(xiàng)頁(yè)在Visual Studio Package模板里可以很輕松的添加選項(xiàng)頁(yè),這是msdn上關(guān)于添加選項(xiàng)頁(yè)的文章Walkthrough: Creating an Options Page。但是在Editor模板里會(huì)比較麻煩一點(diǎn)。 Can I add an options menu to my VSIX extension without adding a VSPackage?這是stackoverflow上關(guān)于如何在非Package模板下添加選項(xiàng)頁(yè)的提問(wèn)。通過(guò)該問(wèn)題我們知道需要在項(xiàng)目里的source.extension.vsixmanifest文件添加<VsPackage>|%CurrentProject%|</VsPackage>元素,要添加該元素可以通過(guò)下圖所示添加 
 除此之外還需要修改csproj文件,將GeneratePkgDefFile和CopyBuildOutputToOutputDirectory元素修改為true,如果csproj文件里沒(méi)有這個(gè)兩個(gè)元素則添加進(jìn)去,最后一點(diǎn)要特別注意,IncludeAssemblyInVSIXContainer這個(gè)元素一定要添加到上述兩個(gè)元素之前,否則選項(xiàng)頁(yè)就不會(huì)顯示出來(lái)。此外,還需要在csproj文件里加上  <PropertyGroup> 此元素,否則會(huì)出現(xiàn)錯(cuò)誤。至此要添加選項(xiàng)頁(yè)的功能已經(jīng)可以實(shí)現(xiàn)了。 六、如果出現(xiàn)加載此屬性頁(yè)時(shí)如何處理經(jīng)過(guò)第五步之后選項(xiàng)頁(yè)可以再工具->選項(xiàng)里顯示了,但有可能會(huì)出現(xiàn)"加載該屬性頁(yè)時(shí)出錯(cuò)"的錯(cuò)誤,此時(shí)則需要在source.extension.vsixmanifest文件繼續(xù)添加下圖的兩個(gè)選項(xiàng) 
 至此,以上是我在開(kāi)發(fā)VS插件的過(guò)程中遇到的問(wèn)題及解決方法,希望以上對(duì)要進(jìn)行VS插件開(kāi)發(fā)的同學(xué)有所幫助。 | 
|  | 
來(lái)自: ThinkTank_引擎 > 《EnvDTE》