nant’s default framework

nant 的預設使用 framework 是 Microsoft .Net Framework 1.0 版
如果要改為 1.1 的話,可以直接到 nant 的安裝目錄下找到
bin\NAnt.exe.config
找到 “defaultframework”
將其後面的值改為 net-1.1 即可~
為了這個問題,在 log4net 上花了不少時間說~~
本想說在編寫 build file 或下 nant 指令時可以指定
剛剛找了一下,卻找不到.
看來需要再琢磨琢磨~~

判斷是否離線

也是從 http://move-to.net 看來的
Global.asax裡有
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
‘ 啟動工作階段時引發
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
‘ 於工作階段結束時引發
End Sub
這兩個預設的方法可以使用
不過Session_End不會立刻觸發,要在使用者關閉所有頁面
而且,到了你所設定的Session的持續時間時,才會發生~

網頁編碼問題

從 http://move-to.net 看來的,節錄.
web.config 的 <system.web> 的設定如果是
<globalization requestEncoding=”Big5″ responseEncoding=”Big5″/>
則 aspx 中可加入
<META HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=big5″>
必須一致!!
另外用 DataAdapter 配合 Parameter 物件,應該就 ok.
後端資料庫欄位也要能支援才行.

用 .NET 寫作 Service

1.用 FileSystemWatcher 元件要注意,若用 c#,在 InitializeComponent() 時,要做適當的 delegate,否則會無法執行.
2.Property 視窗左下角有 Add Installer,點下去以後就可以製作 Installer.
3.vs.net有 installutil 來安裝服務,它提供有 transaction,安裝不成功時可以完全 rollback.
除錯
vs.net 有 [Debug][Processes] 功能
選了以後,再挑選你的服務(須先 start )
按下 Attach ( follow the screen )
最後再到要除錯的地方,按下中斷點即可.
亦可以用 EventLog.WriteEntry() 來乖乖寫入錯誤訊息
另外也可以在 OnStart() 時,用 System.Threading.Thread.Sleep(25000) 先暫停個 25 秒
讓你有時間用 vs.net 的整合環境去選到該 process,然後進行 debug.

mono Overview & xsp-0.2

今天心血來潮,連上Mono 官方網站(http://www.go-mono.net/)一看,版本已經是 0.19 ,然後又加了許多新玩意兒~Debugger, asp.net, ado.net…已經快要把 M$ 的 .NET Framework 實作完成了呢 🙂
Mono 簡單的說就是 Linux 上的 .NET Framework.
安裝方法很簡單,現在網站上有提供各種 Package: rpm, deb…都有,所以只要找到適合你版本的 Package, 下載回去安裝就行了.
我用的是 Red Hat 7.3 的版本
所以用
rpm -ivh libgc-6.1-1.i386.rpm libgc-devel-6.1-1.i386.rpm mono-0.19-1.i386.rpm mon-devel-0.19-1.i386.rpm
就完成安裝了~~
mono 的編譯:
當你寫好一個 .cs (c#的 source)以後,就可以用
mcs your-source.cs
進行編譯.
mono 的執行是比較特別的一點
雖然它實作 .NET Framework ,但執行的方法卻不是跟 .NET 一樣,直接執行就好
而是比較類似 java, 用 mono hello.exe 來執行.
接著是 xsp, xsp 等同於是 asp.net 的實作,只是他還包含了一個小的 Web Server,不過還沒有完全實作好~也暫時沒辦法把她掛到 Apache ,當作一個 module. 🙁
令我驚訝的是,它是用.NET 寫的.想了解 asp.net 內部如何實作的人,這是一個很好的途徑.
安裝方法很簡單,執行 make, make install 就行了
她會把檔案都安裝到 Makefile 所在目錄的 server/test 下.
不過,這一版 0.2 還有一些缺陷,所以依照他的 INSTALL 去做以後,還是不能順利的執行
據我明察暗訪之後,發現要:
1.必須先切換到 server/test 下,執行 ln -s server.exe xsp.exe
2.用 browser 瀏覽的時候,必須確實指定路徑,假設你把 xsp 解在 /root/xsp-0.2 ,也安裝在 /root/xsp-0.2 下的話,那麼,你在 browser 上應該要打 http://localhost:8080/root/xsp-0.2/server/test/index.aspx
這樣子就可以執行了~~
蠻令人驚訝的~
與資料庫連結的部份,我沒有去仔細測這部份,不過我想應該是可以執行的!
嗯~~
希望大家用力多多測試,並且把 bug 回報回去~
這樣子,大家才會有好東西可以用啦 🙂

ASP.NET 的 ViewState

ViewState其實只是很普通的東西~~
簡單的說他就是 form 裡面的 hidden 欄位而已~~
現在在 asp.net 中,它已經被物件化了
我們只要這麼寫
ViewState("TestMe")="Nothing, just hidden."
在輸出的時候,它就會自動被輸出為
<form>
<input type="hidden" name="TestMe" value="!@#$!#@$"/>
</form>
這樣子的 html 碼.
而不需要像以往一樣自行去維護 hidden 欄位的值.
上面 TestMe 欄位的 value 我是隨便打的,事實上 asp.net 會對它作 base64 的編碼,以防止被別人看見~如果你覺得 base64 編碼太過於簡陋,你也可以選擇其他的編碼方式如: 3DES, MD5…等方式來作編碼,以防止被解析出來.
設定ViewState的方法有三種:
1.該目錄下的所有網頁都使用:這需要在 web.config 檔案中設定
<Pages EnableViewState="false"…/>
(p.s. web.config 檔案,事實上,JSP也有類似的用法,你可以互相對照一下)
2.在單一網頁中指定:這需要在每個 .aspx 前面加上
<%@Page EnableViewState="false"…%>
3.在每一個 control 指定:這需要設定該 control 的 EnableViewState 屬性,以 datagrid control 來說,用法如下:
<asp:datagrid EnableViewState="false…/>
如果你想設定編碼方式的話,則需要多加上
<%@Page EnableViewStateMAC=true %><machineKey validation="MD5"/>或<machineKey
validation="3DES"/>
雖然ViewState的內容可以編碼,但是建議還是不要把一些安全性的資料放在這裡.此外,利用這樣子的技術,有個缺點,就是會使得網頁傳遞的時候變慢,因為 form 的內容變多了~
如果想了解更多,請到這裡.

Step by Step 用 C# 做出一個 GUI 的應用程式

這是我在 MSDN 網站上,看到的一篇文章
這篇文章一步一步的引領你如何使用 C# 來寫作 GUI 應用程式.
我覺得很實用
http://msdn.microsoft.com/library/en-us/dnmag01/html/winforms.asp
這篇文章主要是假設你有 Visual Studio.Net beta 1 整合開發環境來引領的
不過如果沒有 vs.net beta 1 的話,可以用 .Net Framework beta 1 來實作
如果使用 .Net Framework beta 2 的話,有幾點要注意:
1.編譯時所引用的 Dynamic Link Library 有變化
這是文章所建議的編譯方法,即 beta 1:
csc /target:winexe /out:Hello.exe /reference:System.dll
/reference:System.WinForms.dll /reference:System.Drawing.dll
/reference:Microsoft.Win32.Interop.dll Hello.cs
beta 2 的編譯方法改變了, 以下是我試出來的結果:
csc /target:winexe /out:Hello.exe /reference:System.dll
/reference:System.Windows.Forms.dll /reference:System.Drawing.dll Hello.cs
主要是 beta 2 將 DLL 的架構做了一些調整
2.using 的架構:
beta 1 是
using System;
using System.WinForms;
using System.Drawing;
而 beta 2 是
using System;
using System.Windows.Forms;
using System.Drawing;
其實這邊主要是跟 1 有關係,在beta 1 你可以試著尋找 System.WinForms.dll, 你將會發現有這麼一個檔案;但是在 beta 2 中卻沒有, beta 2 中只有System.Windows.Forms.dll.
3.MessageBox 類別有變化,其實應該也是因為架構調整的關係吧
beta 1:
MessageBox.Show (String.Format (“{0} is not ” +
“a valid image file”, fileName), “Error”,
MessageBox.OK | MessageBox.IconError);
beta 2:
MessageBox.Show (String.Format (“{0} is not ” +
“a valid image file”, fileName), “Error”,
MessageBoxButtons.OK,MessageBoxIcon.Error);
其他應該還有很多有所調整, 可能要參考 .Net Framework 的說明才能得知囉.