詳解VB.NET動態(tài)編碼技巧
VB.NET有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB.NET動態(tài)編碼技巧,包括介紹Parms.OutputAssembly屬性等方面。
VB.NET動態(tài)編碼技巧
首先創(chuàng)建了一個使用VBCodeProvider的編譯器Comp。.NET版本使用的是不同的方法但是這里所講的是微軟推薦的一個新方法。
為了使用編譯器,你必須創(chuàng)建能描述應(yīng)用程序的參數(shù)。這些參數(shù)類似于VS中你創(chuàng)建的參數(shù),只是現(xiàn)在你可以對它們進行定義。該代碼一開始就將GenerateExecutable設(shè)置為True,這意味著你需要的是一個EXE文件而不是DLL.
Parms.OutputAssembly屬性包含了輸出文件的名稱。你只需要在想創(chuàng)建文件時提供這一信息即可,而不需要生成可執(zhí)行內(nèi)存了。如果你ixiang生成可執(zhí)行文件的內(nèi)存版本,可以將Parm.GenerateInMemory屬性設(shè)置為True.
使用Parm.TreatWarningsAsErrors屬性來確定如何處理警告信息。默認的設(shè)置會使其為錯誤,這意味著你的應(yīng)用程序可能無法對其進行編譯。大多數(shù)程序員使用默認設(shè)置,盡管他們開發(fā)了程序,但是在開發(fā)完成的程序中卻將其設(shè)置為False.
大多數(shù)應(yīng)用程序需要外部DLL以正常運行。當(dāng)然,你不能創(chuàng)建任意的沒有引用外部DLL的Windows表單程序。通常,你要使用Reference文件夾來完成這一任務(wù)。不過,當(dāng)你動態(tài)創(chuàng)建代碼的時候可以依賴于Parms.ReferencedAssemblies屬性。如下所示,只需添加你要的DLL即可。
現(xiàn)在,你已經(jīng)定義了項目,接下來需要為其創(chuàng)建源代碼。如前文所述,你可以依賴于一個外部文件或DOM模式。然后,該示例創(chuàng)建了代碼因此你可以看到整個過程。下面是代碼的原始形式:
- Imports System.Windows.Forms
- Module TestAssembly
- Sub Main()
- MessageBox.Show("Dynamically Created Code!")
- End Sub
- End Module
這個簡單的例子顯示了一個對話框。注意vbCrLf的使用。如果你不使用這一方法,那編譯器會發(fā)送給你一個錯誤信息。vbCrLf條目在該代碼中所起的作用與在程序代碼中的作用相同,只是添加的方式不一樣。
從這一點老說,你***會用Comp.CompileAsseblyFromSource()方法編譯代碼。當(dāng)使用DOM模式和文件的時候可以使用這一方法。而在所有三種情況中,編譯器用參數(shù)和源代碼創(chuàng)建了你請求的輸出。該運算的輸出出現(xiàn)在Executable中,是CompilerResults類型。
編譯的失敗次數(shù)多于程序員的預(yù)計。無論你是在哪里使用VB.NET動態(tài)編碼技巧,你必須假設(shè)會出現(xiàn)失敗的情況以及處理失敗的方案。在本例中,代碼尋找的是錯誤并在編譯失敗時將其展示在了信息框中。否則,代碼會依賴于Process.Start()方法來啟用可執(zhí)行文件。
VB.NET動態(tài)編碼技巧并不是***鑰匙。當(dāng)你為開發(fā)問題找到了好的靜態(tài)解決方案時,當(dāng)然也可以使用。但是在我們所列出的情況中沒有可行的靜態(tài)方案,因此要選擇VB.NET動態(tài)編碼技巧。大多數(shù)情況下,要用VB.NET動態(tài)編碼技巧解決以下問題:
◆用戶的環(huán)境會以不可預(yù)見的方式更改時;
◆無法控制用戶電腦的安裝;
◆用戶或應(yīng)用程序都添加了你要用控件執(zhí)行的數(shù)據(jù)要素;
◆應(yīng)用程序必須執(zhí)行很早以前的安裝任務(wù),且這些任務(wù)與電腦,環(huán)境,網(wǎng)絡(luò)或其他不確定因素聯(lián)系緊密時;
◆應(yīng)用程序要執(zhí)行了處理級別的任務(wù),且這些任務(wù)取決于機器連接或其他狀況。
顯然,還有其他一些情況能使用VB.NET動態(tài)編碼技巧。最重要的是記住但凡有不可預(yù)知的情況下要考慮使用VB.NET動態(tài)編碼技巧。通常在編碼環(huán)境中出現(xiàn)了靜態(tài)代碼無法處理的情況時,我們就可以使用VB.NET動態(tài)編碼技巧。
【編輯推薦】