ASP.NET 2.0網站專案同時使C#與VB.NET之技巧(新書連載)

ASP.NET 2.0網站專案同時使C#VB.NET之技巧(新書連載)

你知道專案ASP.NET 2.0網站要如何同時使用C#VB.NET兩種語言及多組件的技巧嗎?

 

節錄自【聖殿祭司的ASP.NET 2.0專家技術手冊】新書

  在以往VS.NET 2002VS.NET 2003Visual Studio工具本身不支援多個組件檔(Assembly),也就是專案編譯後只會產生一個.dll組件,而一個組件只允許包含一種語言(因爲系統會呼叫對應C#VB編譯器進行編輯),因此在同一個專案中要使用兩種語言是辦不到的;但是在VS 2005因爲專案支援多個組件,所以利用這個特性就可以同時使用兩種以上的語言如C#VB.NET,因此.cs.vb的類別在專案中就可以直接拿來使用,直接就可以new instance,並不需要先編譯成.dll檔再加以引用,如此對於許多公司或程式設計師彈性變大了,算是一大福音。

   至於專案支援多個組件是如何辦到的?在前面有提到ASP.NET中有許多內建特殊資料夾,如APP_CodeApp_GlobalResources等等,只要歸類在這些資料夾的檔案在編譯時就會產生獨立的組件,各位可以建立一個專案進行測試,加入類別檔、資源檔、Web Services等等,最後再用aspnet_comipler.exe先行編譯後,再檢查編譯後目標路徑的bin目錄,裏面同時包含好幾個.dll檔就是證據。

範例2-12 專案同時使用C#VB類別程式
而利用多個組件的原理,在VS 2005專案中可以同時使用C#VB類別程式,但仍必須遵守一些程序及技巧來達成,當然這必須祭司傳授給你才行得通。


2-54 多語言專案執行畫面



上面的directoryName 是對應下一個步驟csvb是所要加入的目錄名稱。

Step 3
:在App_Code建立C#VB目錄分隔
(1)
請在網站按滑鼠右鍵選擇【屬性頁】說i加入ASP.NET資料夾】誑[入「App_Code」資料夾。
(2)
接着在App_Code資料夾底下加入「CS」及「VB」兩個資料夾,以作爲C#VB類別各自存放的目錄。



2-55 建立不同語言目錄



Step 4
:加入C#VB類別程式
(1)
請在CS資料夾中加入C#類別,CSharpObject.cs類別程式如下:
01 using System;
02 public class CSharpObject
03 {
04
  public string Hello()
05
  
{
06
   
return "Hi...C#";
07
  
}
08 }

(2) 
請在VB資料夾中加入VB類別,VBObject.vb類別程式如下:

01 Imports Microsoft.VisualBasic
02
03 Public Class VBObject
04
  Public Function Hello() As String
05
   
Return "Hi...VB"
06
  
End Function
07 End Class

Step 5
:使用類別程式

請在「呼叫C#類別」及「呼叫VB類別」兩個按鈕加入Click事件程式:
01 //
呼叫C#類別
02 protected void btnCSharp_Click(object sender, EventArgs e)
03 {
04
  CSharpObject myCSharpObject = new CSharpObject();
05         txtMsg1.Text = myCSharpObject.Hello();
06 }
07
08 //
呼叫VB類別

09 protected void btnVB_Click(object sender, EventArgs e)
10 {
11
  VBObject myVBObject = new VBObject();
12         txtMsg2.Text = myVBObject.Hello();
13 }
程式說明:

完成後請執行看看,各位可以看到MultiLang.aspx程式的確同時使用了C#VB兩種語言,並且可以直接在C#中直接呼叫VB類別產生實體;不過當然以上程式只是示範性質,您可以在類別中建構更爲複雜的程式(如ADO.NET或其他)。

注:
(1)
VS.NET 2003若您專案必須使用多個組件,雖說Visual Studio本身不支援,但您可以使用Assembly Linker(AL.exe)手工來達成,並非.NET不能做。
(2)
同時使用C#VB類別程式,並非是指在同一個類別中可以穿插混合使用兩種語言,如1,3,5行使用C#2,4,6行使用VB,倘若如此只會造成天下大亂。
(3) VS.NET 2003
不支援多組件多語言,而VS 2005支援,這反映出真實世界中企業或許多專業人士向微軟反映需要這個功能,微軟纔會順應民意加入這項技術,故大家應平心來看待這項技術,不能因自身反對或沒需要,徑而推論他人也不需要這項技術,或視之爲洪水猛獸。
(4)
在這只是告知各位VS 2005中要如何使用兩種語言,至於一個專案是否應該同時使用C#VB兩種語言,它有實際面、策略面與意識型態面的議題,故要不要用則是必須貴公司或專案視本身需求去評量決策,祭司不表意見。

此外祭司要提出一個思考點,上面理論的確很精采沒錯,也確實能夠正常執行運作,但是如何證明VS 2005真的會產生多個組件?若不能證明的話就像神學中說有神有存在,信者恆信,不信者恆不信,而比例可能各佔一半;然而要證明它有點困難,因爲不曉得各位有沒有發現在VS 2005建置編譯網站後,並不會像VS.NET 2003在專案所在路徑下的Bin目錄中產生一個dll組件,所以根本沒法察看是否有多個組件,那怎辦?嗯~還記得前面介紹過aspnet_compiler.exe先行編譯這個工具嗎?在此利用這個工具編譯「VS2005IDE」專案,指令如下:
Aspnet_compiler –v 02VS2005Advance C:/TMP02/VS2005Advance

將編輯過後的專案會輸出到C:/TMP02/VS2005Advance,接着到該路徑下的Bin目錄可以發現確實依目錄而產生App_Subcode_cs.dllApp_Subcode_vb.dll兩個組件,如此便能夠證明祭司所言屬實,大家該全部得信了吧!



2-56 先行編譯後的多個組件(點圖放大)


  即便專案沒有同時混用VBC#兩種語言的需求,是否這個技巧就沒有其他附加價值呢?還是可以利用相同的原理技巧做出多個組件,而不必每次都叫用一個很龐大的dll組件,如此不但系統略爲笨重,且又會非常耗用資源,故若專案程式十分龐大者可以利用這個技巧來產生多個組件,有意義的分解成多個較小組件可以求得更佳的系統效能。

節錄自【聖殿祭司的ASP.NET 2.0專家技術手冊】新書

 

 請參考MultiLang.aspx程式,以下是步驟說明:
Step 1
:引用Microsoft.VisualBasic命名空間
若果C#專案中有使用到VB.NET的相關功能,請自行加入相關命名空間的參照,以及在VB.NET程式中Import命名空間。

Step 2
:設定Web.configC#VB目錄分隔
請在Web.config檔中加入下列設定:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章