在之前的博客《SharePoint 2013本地開發解決方案以及遠程調試》中,我們介紹了如何通過修改注冊表,使SharePoint 2013 解決方案可以本地編輯,也提及了即使修改注冊表,還不能做到本地創建。
后來,仔細看了一下注冊表的結構,思考了一下可能造成這樣問題的原因,經過幾次嘗試,發現在本地創建SharePoint解決方案,也是可行的。但是,並不是所有開發模板,都可以本地創建,例如事件觸發器、列表、工作流等,創建過程必須和SharePoint進行交互的模板,我們無法在本地創建。
經過測試,發現有如下模板是可以本地創建的:
Ø WebPart的開發
Ø 可視化WebPart的開發
Ø 模塊部署母版頁
Ø 應用程序頁開發
Ø 網站欄的開發
Ø Feature的創建
本結論為個人測試結果,僅供開發參考,如有問題還需要細細排查。以上都是自己測試通過,除了以上開發模板,我在測試中發現,都必須和SharePoint交互才能創建,我們對於本地創建無能為力。
1、若希望本地使用VS2013創建SharePoint解決方案及項目,需要刪除以下注冊表節點,即SharePointTools,刪除前記得導出備份,方便以后需要時再次導入,經過一段時間的使用,還未曾發現VS使用有問題。
2、如果不修改注冊表,創建SharePoint解決方案,會提示如下錯誤:
3、刪除注冊表以后,重啟VS,創建SharePoint空項目成功,如下圖:
4、創建可視化WebPart,在項目上右鍵,添加新項,選擇可視化WebPart,然后發現生成報錯;
5、找到錯誤代碼,發現是這個初始化函數報錯,然后看黃色的警告,發現是有些本來自動生成的文件,沒有生成成功(因為必須和SharePoint交互,才能自動生成);
6、對比正確的可視化WebPart,發現VisualWebPart1.ascx.g.cs這個文件,沒有生成成功,手動添加進來,如下圖;
7、這個文件,不僅僅是手動添加進來就好使的,在使用過程中,還發現及時手動添加進來,自動生成的代碼,也不會生成,這就為我們開發帶來了不遍。但是,我通過手動添加需要生成的代碼,也成功完成了可視化WebPart的Demo。我在部件上添加了一個Div,ID為“mydiv”,runat=server,
8、手動添加該div的聲明代碼;

1 [GeneratedCodeAttribute("Microsoft.VisualStudio.SharePoint.ProjectExtensions.CodeGenerators.SharePointWebP" + 2 "artCodeGenerator", "12.0.0.0")] 3 protected global::System.Web.UI.HtmlControls.HtmlGenericControl mydiv; 4 5 [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] 6 [GeneratedCodeAttribute("Microsoft.VisualStudio.SharePoint.ProjectExtensions.CodeGenerators.SharePointWebP" + 7 "artCodeGenerator", "12.0.0.0")] 8 private global::System.Web.UI.HtmlControls.HtmlGenericControl @__BuildControlmydiv() 9 { 10 global::System.Web.UI.HtmlControls.HtmlGenericControl @__ctrl; 11 @__ctrl = new global::System.Web.UI.HtmlControls.HtmlGenericControl("div"); 12 this.mydiv = @__ctrl; 13 @__ctrl.ID = "mydiv"; 14 return @__ctrl; 15 }
9、在private void @__BuildControlTree中添加創建控件代碼:
1 global::System.Web.UI.HtmlControls.HtmlGenericControl @__ctrl1; 2 @__ctrl1 = this.@__BuildControlmydiv(); 3 System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl)); 4 @__parser.AddParsedSubObject(@__ctrl1);
10、為可視化WebPart添加后台代碼,如下圖:
代碼非常簡單,只是讀取站點的Title,並顯示出來:
11、創建完可視化WebPart以后,創建WebPart,在項目上右鍵,新建項,選擇WebPart;WebPart比較簡單,只是添加后台代碼就可以了,代碼依然是讀取站點Title然后Render出來;
12、添加完畢WebPart,我們添加網站欄,新建一個網站欄,然后,編輯網站欄的Xml即可:
13、然后,再添加應用程序頁,如下圖:
因為測試,功能比較簡單,只是改了上面的文字,就是測試應用程序頁是否可以使用;
14、創建模塊,添加母版頁,如下圖:
這是模塊的目錄結構:
模塊的Xml描述文件,如下圖:
15、到這里,能創建的項目,都已經創建完畢,並添加了簡單的功能代碼,那些不能創建的,會報如下錯誤,看了看應該是調用程序集與SharePoint交互,而本地並沒有SharePoint造成的;
16、下面是我的本地解決方案的完整結構,包括兩個Feature(一個web,一個Site范圍),還包括應用程序頁、模塊、網站欄、可視化WebPart、WebPart;
17、將代碼拷貝到服務器,在項目上右鍵,按功能鍵F4調出屬性菜單,修改站點Url,在服務器上打包部署;
18、部署解決方案完畢,頁面上添加WebPart,正常顯示:
19、頁面上添加可視化WebPart,顯示正常:
20、打開網站欄,我們創建的網站欄已經部署成功,如下圖:
編輯網站欄,如下圖,可以編輯網站欄的欄名,並選擇網站欄所屬的分組,這里的分組是網站欄xml中描述的分組:
21、打開應用程序頁面,如下圖,顯示正常:
22、使用SPD打開網站,找到母版頁文件夾,發現母版頁也已經部署成功,就此,所有測試的模板,均證實本地創建、開發,服務器部署是可行的;
總 結
美中不足,因為本地沒有SharePoint環境,所以我們打包解決方案依然要去有環境並裝有VS的地方打包,然后部署,但是本地開發,也已經算是很大的進步了,我們不用在糾結於沒有服務器了。
本地創建SharePoint解決方案,而后服務器打包部署,遠程調試,更加方便了SharePoint的開發和使用。最后,如有對SharePoint模板開發不熟悉的,可以參見我的圖文入門開發系列博客,對遠程調試不了解的,也可以參見我的上一篇博客。
再次,感謝您的閱讀,希望我的博客可以為您帶來幫助,歡迎熱衷於SharePoint研究和開發的程序員,加入我的qq群一起討論、探討SharePoint開發。
附 錄