Time of Update: 2018-12-07
VSTO是微軟提供給.Net開發人員的一個介面,通過他我們可以對Office程式做一些處理。但是這個介面並不盡善盡美,相比微軟的很多其他產品,VSTO的穩定性並不好,相關的文檔也很少。這種情況下,很多問題需要我們程式員自己去克服。我自己從08年進了現在這家公司,斷斷續續做VSTO開發已經快2年半了,不敢說對VSTO精通,但至少已經有了深入的解,尤其對開發中的一些Trick和一些Bug。準備寫點東西記錄一下這兩年來的心路曆程。同時也感慨於國內的VSTO文檔資料實在匱乏,我自己在開發過程中走了不少彎
Time of Update: 2018-12-07
開始之前,首先我介紹一下我的開發環境:VS2010 + Office 2010,是基於.Net framework 4.0和VSTO 4.0。以下的範例代碼都基於這個,如果你使用的是VS2008,那麼問題也不大,基本可以移植過去。需要注意的是.Net framework 4.0中增加了dynamic類型和選擇性參數,而這兩點新的特性在VSTO
Time of Update: 2018-12-07
在前一篇文章中,我初步介紹了如何如何開發一個VSTO程式,在本文中,我將進一步深入介紹Word的外掛程式開發。Word是一個大家在日常工作中一直接觸的文檔工具,也是微軟最賺錢的產品之一。從最初的Word 1.0到現在的Word 2010曆經了13代的演化,已經成為了一個比較複雜的系統。(這裡稍微跑題一下,Office 2010的版本代號是version 14,但是我為什麼說Word一共演化了13代呢?因為Office並沒有Version 13,上一代的Office 2007是Version 12
Time of Update: 2018-12-07
上一講我們完成對Word的介紹,文本開始,我將著重介紹Outlook。Outlook是微軟Office中一個非常實用的工具,尤其在一個擁有Windows
Time of Update: 2018-12-07
軟體開發中最常見的項目風險是糟糕的需求分析和糟糕的項目設計,一個好的專案規劃者能儘可能早地將主要的風險消除掉,以使項目的大部分工作能儘可能平穩地進行,因此準備工作就傾向於集中改進需求分析和專案規劃.-----------第3.1章
Time of Update: 2018-12-07
Time of Update: 2018-12-07
我們看下List的Sort排序的函數為public void Sort (Comparison<T> comparison)This method uses System.Array.Sort, which uses the QuickSort algorithm. This implementation performs an unstable sort; that is, if two elements are equal, their order might not be
Time of Update: 2018-12-07
我的第一個WP7應用在這裡特別感謝“林永堅”、“李鵬”、“李鵬”、“”Windows Phone 開發教學系列視頻之四天玩轉裡的老外“,”webabcd“等...。正是看了你們的教程和博文,我才一步步學會wp7開發。什麼也別說,直接!背景黑色主題背景淺色主題以上是我WP7的應用,在以後的日子我還將繼續開發wp8應用
Time of Update: 2018-12-07
【題外話】之前大部分時間都在用Visual Studio 2008做開發,雖然也點開過程式碼分析,但是一看一大串內容,尤其是一大串針對命名的建議,就果斷關閉了。這次實習使用的Visual Studio 2012,發現程式碼分析預設去掉了很多內容,顯示的也都是比較重要並需要改進的地方,所以也都認真研究了一下。 【文章索引】問題和解決方案為什麼這樣去做相關連結 【一、問題和解決方案】應該有人會寫如下的代碼吧,為了釋放資源,我們把開啟的東西都關閉掉,貌似沒有什麼問題。 1 FileStream fs
Time of Update: 2018-12-07
文章目錄 摘要目錄
Time of Update: 2018-12-07
具體代碼如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>code.js.cn </title>
Time of Update: 2018-12-07
之前,在使用異常捕獲語句try...catch...throw語句時,一直沒太留意幾種用法的區別,前幾天偵錯工具時無意中瞭解到幾種使用方法是有區別的,網上一查,還真是,主要是區別在堆棧資訊的起始點不同。總結如下:我們都知道,C#中使用throw和throw ex拋出異常,但二者是有區別的。在C#中推薦使用throw;來拋出異常;throw
Time of Update: 2018-12-07
來到新公司半年多了,這半年壓力巨大,但也提升很多,經曆了這麼多,對所謂的壓力也看得很淡了!最近因為業務需求的變更,任務量成倍的劇增,一個人實在是忙不過來了,於是Leader給我分配了一個新同事來跟我一起做!多一個人多一份力量,這本來是件好事,可是一個星期過去了,我沒有體會到“多一個人多一份力量”的好處,經過Leader和PM兩次對我的批評和指導,原來我在怎麼帶新人這個環節上出現了很嚴重的錯誤,於是在這裡寫下我的反思!1.新人是跟你一起承擔責任和分擔壓力的 因為自己也是新手,所謂的帶新人,也就是
Time of Update: 2018-12-07
前段時間在測試的時候發現了一個問題,看過Log之後發現在插入資料到資料庫的時候發生異常了!原因是由於插入的字串太長,項目中的用到的類型是NVARCHAR,下面就是對它們的理解:1.VARCHAR -- 位元組數 樣本:VARCHAR(10) - [中文代表兩個位元組數] 上面的定義表示我儲存的位元組數為10個,那麼英文就能存10個,中文只能存5個! 2.NVARCHAR -- 字元數 樣本:NVARCHAR(10) -
Time of Update: 2018-12-07
文章目錄 摘要目錄 摘要 ADO.NET強大的優勢在於對不同的資料來源提供一致的訪問。在上一篇文章《你必須知道的ADO.NET(二)瞭解.NET資料提供者》中,我們知道.NET對不同資料來源,使用不同的資料提供者,這使得我們可以更高效的訪問相應的資料來源。除了.NET資料提供者外,我還得說說另外一位功臣:連接字串(Connection
Time of Update: 2018-12-07
偶然間寫Swap函數的時候,想起來所謂的不用中間變數的寫法,於是實現如下:SwapCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1static void Swap(ref int a, ref int b) { 2 a = a + b; 3 b = a - b; 4 a = a -
Time of Update: 2018-12-07
最近在用WPF做開發,項目進展的還算順利,WPF總體來說還是比較方便的,其中變化最大的主要是Listview和Treeview控制項,而且TreeView似乎在WPF是一個備受指責的控制項,很多人說他不好用。其實我覺得是開發人員沒有掌握好WPF中所傳承的MVC思想。在View方面,WPF中的TreeView給了開發人員更大的靈活性,開發人可以非常簡單定製每個Node乃至整棵樹的外形。同時新的TreeView可以接受各種Collection作為ItemSource,非常靈活。只要簡單地瞭解這些新加
Time of Update: 2018-12-07
文章目錄 移進和規約兩個重要的泛型ShiftReduceParser<YYSTYPE,YYLTYPE>Parser
Time of Update: 2018-12-07
第一句總是廢話的開始動手編寫這個系列是出於對前面一段時間開發語言服務過程的總結,經常把自己掌握或沒有完全掌握的東西寫下來有助於加深印象。由於本人才疏淺薄,也是剛接觸VSX方面的開發,難免有些錯誤的地方,還請各位大俠多多包含,多多指正。 準備工作由於項目的需要,在產品中需要整合某個語言的服務,當然我們的產品首先本身就是一個VSX產品。我“有幸獲得”了這個任務,剛開始接觸語言服務的時候也是完全不知道怎麼回事,事實上我對VSX都沒有瞭解過,所以我花了些時間對VSX開發做了些功課。當然我相信本文的讀者應
Time of Update: 2018-12-07
回顧在之前的系列中,我們除了介紹了ManagedMyC這個例子、手動構建了一個SimpleLSHost,主要的精力都放在了Lex和Yacc中。之所以這樣安排,因為我覺得“內功”比“招式”重要的多。不過對於學習而言,一上來就接觸深層次的東西往往是個艱苦的過程。正因為如此,在接下來的幾篇中,我將要開始介紹語言服務的各種“招式”,那麼這篇就先從智能感知開始吧。 構建一個LS包我不打算從頭開始構建一個LS包,而是從我之前建立的SimpleLSHost開始。點擊下載SimpleLSHost執行個體。如果