發表文章

使用CodeCompiler動態建置程式碼

圖片
話說女友在跟她就讀大學的妹妹聊天時,妹妹聊到有一個程式的作業不會寫,此 時女友當然第一個念頭就想到我了。跟我講時,我本來想說以軟體不同來推掉,因為 想說大部分的學校還在教VisualBasic,沒想到她們使用的是VS2008 ,推也推不掉 ,講了一堆類似給她釣竿而不是給她條魚吃的道理,還被念我小氣昏….Ps後面是我在發洩,不要理我。 作業題目是只要作出一個[四則運算]的應用程式即可,題目看起來很簡單,但實際 瞭解後,難的部分在於要可以輸入類似1+2+(3*3)*5/6來計算出結果,此時想到同事有 跟我提起一個使用動態程式碼來作出這樣效果的範例,馬上Google了一下,果真被我 找到使用CodeCompiler可以作出此效果。 程式如下: 1.動態建置類別 2.使用方式 3.執行畫面   完整範例下載 http://cid-fab913153ae2ed86.office.live.com/self.aspx/.Public/Code/ASP.NET/%e5%9b%9b%e5%89%87%e9%81%8b%e7%ae%97-%e5%8b%95%e6%85%8b%e7%b7%a8%e8%ad%af.zip 參考 http://www.cnblogs.com/nba4523/archive/2008/12/25/1362156.html

視覺化偵錯一次到位

圖片
主旨如題,視覺化的偵錯技巧讓我們可以在偵錯時,可以輕易看到變數的內容,例如:網頁上所有狀態值、Xml變數預覽、圖形預覽..等等。 一.前置步驟 1.下載檔案 http://files.dotblogs.com.tw/kim/1002/2010211105253889.zip 2.將上圖紅框的dll放到底下路徑 C:\My Documents\Visual Studio 2008\Visualizers C:\My Documents\Visual Studio 2005\Visualizers 二.範例展示 1.WebVisualizer(網頁狀態值) Application的值 Session的值 2.CustomVisualizer(字串值or其他變數值) 3.ImageVisualizer(圖形) 4.XmlVisualizer(Xml預覽) 範例下載 http://files.dotblogs.com.tw/kim/1002/201021110592987.zip

如何將.js檔建置到dll檔內

圖片
前言: 本章的主旨為介紹如何將.js檔建置到dll檔內,在介紹先來說明撰寫JavaScript放置的幾種方式: 1.放在各Page內 優點:Debug及開發速度 快 缺點:無法與其他Page共用及不方便管理 2.放在.js檔 優點:可以與其他Page共用 缺點:Debug及開發速度 中,部署較不方便,且前端需多下載此份檔案,速度較慢 3.放在dll檔內 優點:1.可以與其他Page共用共用及檔案Size較小並放在Cache內,所以載到前端速度最快。 2.因內崁在dll內,所以部署方便。 缺點:Debug及開發速度慢,部署後不易修改。 針對上述的第三點,我想大家一定很陌生,因為通常這只有撰寫底層的人員才會用到, 廢話不多說,以下介紹如何使用: 1.將檔案屬性改成內崁資源 2.設定AssemblyInfo.cs 3.程式引用Resource檔方式

實作HttpModule代替Global.asax 處理各項事件

實作 HttpModule 可以取代 Global.asax ,來處理 Request_start 、 Session_Start 或 Application_Error 等事件的處理。看到這裡會有點疑問吧,既然兩者都一樣為何要使用 HttpModule 呢 ? 它的優點在於不必和整個網站挷在一起,不需使用時可以直接在組態檔拿掉。 本例以當網頁發生錯誤時要作該事件的處理 實作步驟 1. 新增類別並實作 HttpModule namespace Kim.Web { public class ErrorModule : IHttpModule { #region IHttpModule 的介面方法 public void Init(HttpApplication application) { //註冊只要網頁發生錯誤的事件處理 application.Error += new EventHandler(application_Error); } public void Dispose() { } #endregion public void application_Error( object sender, EventArgs e) { //主要程式處理 } } } 2.在網站註冊ErrorModule < httpModules > < add name ="ErrorModule" type ="Kim.Web.ErrorModule, Kim.Web" /> </ httpModules > 說明:type="命名空間+類別名稱,組件名稱(Kim.Web.dll)" 參考網址 http://codebetter.com/blogs/karlseguin/archive/2006/06/12/146356.aspx

如何抓取使用者的瀏覽器語系設定

圖片
  我的瀏覽器 原來的設定是中文台灣,現改為如下圖   透過程式將上圖的設定值顯示出來   Response.Write("使用者瀏覽器的語系:<br>");               for (int i = 0; i < Request.UserLanguages.Length; i++)             {                 Response.Write(string.Format("{0}<br>", Request.UserLanguages[i] ));               } 顯示如下 :

.net說明文件產生器

圖片
一、安裝 Sandcastle 首先安裝微軟的 Sandcastle - Documentation Compiler for Managed Class Libraries http://www.microsoft.com/downloads/details.aspx?familyid=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en 二、安裝 Sandcastle Help File Builder 製作HELP 文件,具 UI 界面的工具 http://shfb.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=18639 三、製作 HELP 文件

實作ConfigurationElement

  一般來說我們若有某些共用的屬性是供全域使用的話會在組態檔增加一個 Appsetting 設定例 :ConfiguationManager.Appsetting["test"] 但此種寫法,僅適合單一值,若此設定需設定多個欄位值的話,我們可以藉由實作 ConfiguationElement 來實現

Const 變數與Static readonly的不同

假日在家看書 (Java 語言 ) ,在使用 static   final 變數時,可以使用針對該變數使用 Switch{} 陳述式,但使用 C# 的 staitc readonly 時卻無法使用,錯誤訊息為 [ 必須為 常數值 const ] 。   為此我看了 msdn 作一下小研究, const 與 static readonly   都是 唯讀 變數,系統啟動時就存在,其生命週期等同 Application 變數。         常數 const 在宣告時就必須 初始它的值且是固定不可變的 ,而 static readonly 則是宣告時不強制初始值,但既然已經宣告作 readonly 之後當然也不能再給值,所以一般若宣告 static readonly 時一定會給初始值,不過 其初始值是可變的 。   程式碼比較如下 : const int delayMonth=1; //正確   const int delayMonth=DateTime.Now.Month; //錯誤 因為DateTime.Now.是可變的 例如 : 本月是 7 下一個月是 8 ,常數必須是一個 明確的固定值 而不是隨著外在因素變動。   static   readonly int delayMonth= DateTime.Now. Month ;// 正確   初始值是可變的   由上述的兩個特性作比較的話 switch 的陳述式比須針對 不可變動值才能作 case 的動作 ,所以 static readonly 並不適用,只能使用 const 變數 。   參考 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.cht/dv_csref/html/79eb447c-117b-4418-933f-97c50aa472db.htm

如何使用#if(debug)

圖片
在程式開發時,我們有時會遇到需要在客戶主機的環境才可以測試某段結果, 此時會我們寫一段測試程式在客戶端執行,等執行結果是 ok 的話才會將此程式拿掉,再布署一次 …... ,但這樣是不是很麻煩呢 ? 我們可以利用 #if(debug) 幫我們解決上述問題 如下程式碼 : #if(DEBUG) Response.Write("test………."); #endif 上述的程式只有在組態檔 <compilation debug=" true "> 才會執行, 所以可以在測試將它設為 false 正確再改為 true 2011/04/17 更正,如下圖是以建置的組態來判斷

類別與結構的分別

   一直以來雖然對類別與結構分別有基本的瞭解,但有人問我差異是在哪時,我又說不太出個所以然 ... 所以花了點時間閱讀讀一下 msdn 的文章 study 一下 以下是結構的應用 結構與類別所使用的語法幾乎相同,不過結構的限制比類別多: 結構宣告內不能初始化欄位,除非將其宣告為 const 或 static。 結構不可宣告預設建構函式 (沒有參數的建構函式) 或解構函式。 結構為實值型別,而類別則是參考型別。 與類別不同的是,結構不需使用 new 運算子就能執行個體化 結構可以宣告建構函式,但是必須採用參數 結構無法從另一個結構或類別繼承而來,且它不能成為類別的基底。所有結構都是從繼承自  System.Object  的  System.ValueType  直接繼承而來 結構可實作介面 結構可以用來當做可為 Null 的型別,而且可以對其指派 null 值。