本節書摘來自異步社群《聖殿祭司的asp.net4.0專家技術手冊》一書中的第1章,第14節,作者: 奚江華,譯者: 武海軍 , 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
聖殿祭司的asp.net4.0專家技術手冊
早期vs.net 2002及vs.net 2003的visual studio工具不支援多個元件檔案(assembly),也就是項目編譯後隻會産生一個dll元件,而一個元件隻允許包含一種語言(因為系統會調用對應c#或vb編譯程式進行編譯),是以在同一個項目中要使用兩種語言是辦不到的;但在vs 2010中,因為項目支援多個元件,是以利用這個特性就可以同時使用兩種以上的語言(如c#與vb),是以.cs或.vb的類别在項目中就可以直接拿來使用,直接就可以new instance,不需要先編譯成dll檔案再加以引用。這樣一來對于許多公司或程式員來說,靈活性變大了。
至于項目支援多個元件是如何辦到的?在前面提到asp.net中有許多内建特殊檔案夾,如app_code、app_globalresources等,隻要歸類在這些檔案夾的檔案,在編譯時就會産生獨立的元件,各位可以建立一個項目進行測試,加入類檔案、資源檔案、web services等,最後再用aspnet_compiler.exe預編譯後,再檢查編譯後目标路徑的bin目錄,裡面同時包含好幾個dll檔案,就是證據。
範例1-9 asp.net 4.0項目同時使用c#與vb類程式
利用多個元件的原理,在asp.net 4.0項目中可同時使用c#與vb類程式,如圖1-46所示。但必須遵守一些程式及技巧,請參考multilang. aspx程式。具體步驟如下。

如果c#項目中使用到vb的相關功能,請自行加入相關命名空間的參照,以及在vb程式中import命名空間。
在web.config檔案中設定c# 與vb目錄分隔:
上面的directoryname是對應下一個步驟cs及vb所要加入的目錄名稱。
在網站上按滑鼠右鍵,在彈出的菜單中選擇【屬性頁】→【加入asp.net檔案夾】→加入“app_code”檔案夾,在app_code檔案夾中加入“cs”及“vb”兩個檔案夾,以作為c#與vb類各自存放的目錄,如圖1-47所示。
在cs檔案夾中加入csharpobject.cs類程式:
在vb檔案夾中加入vbobject.vb類程式:
分别輕按兩下“調用c#類”及“調用vb類”按鈕加入click事件程式:
附注 (1)在vs.net 2003中,若項目必須使用多個元件,雖說visual studio本身不支援,
但可使用assembly linker(al.exe)手工來完成,并非.net不能做。
(2)同時使用c# 與vb類别程式,并非是指在同一個類别中可以穿插混合使用兩種語
言,如1、3、5行使用c#,2、4、6行使用vb,倘若這樣,隻會造成大亂。
(3)在這隻是告知vs 2010中要如何使用兩種語言,至于一個項目是否應該同時使用
c#或vb兩種語言,它有實際面、政策面的議題,故要不要用,必須由貴公司或項
目本身需求去評量決策,祭司不發表意見。
此外要提出一個思考點,上面理論的确很精采,也确實能夠正常執行運作,但是如何證明真的會産生多個元件?若不能證明的話,信或不信比例可能各占一半。然而要證明它有點困難,因為vs 2010建構編譯網站後,不會像vs.net 2003在項目所在路徑下的bin目錄中産生一個dll元件,是以,根本沒法檢視是否有多個元件,那怎辦?還記得前面介紹過aspnet_compiler.exe預編譯這個工具嗎?在此利用這個工具編譯“vs2010ide”項目,指令如下:
<code>aspnet_compiler –v vs2010ide c:\tmp\vs2010ide –f</code>
編譯後的項目會輸出到c:tmpvs2010ide,接着到該路徑下的bin目錄,可以發現确實按照目錄而産生appsubcode_cs.dll與app subcode_vb.dll兩個元件,如圖1-48所示,這樣就能得到驗證!
即便項目沒有同時使用vb與c# 兩種語言的需求,是否這個技巧就沒有其他附加價值呢?還是可以利用相同的原理做出多個元件,而不必每次都調用一個很龐大的dll元件,這樣不但系統略為笨重,且又會非常耗用資源,如果項目程式十分龐大,可利用這個技巧産生多個元件,有意義地分解成多個較小元件,求得更佳的系統性能。
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。