国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

詳細介紹.NET中的動態編譯技術

2024-07-10 12:44:29
字體:
來源:轉載
供稿:網友

代碼的動態編譯并執行是一個.NET平臺提供給我們的很強大的工具用以靈活擴展(當然是面對內部開發人員)復雜而無法估算的邏輯,并通過一些額外的代碼來擴展我們已有 的應用程序。這在很大程度上給我們提供了另外一種擴展的方式(當然這并不能算是嚴格意義上的擴展,但至少為我們提供了一種思路)。

動態代碼執行可以應用在諸如模板生成,外加邏輯擴展等一些場合。一個簡單的例子,為了網站那的響應速度,HTML靜態頁面往往是我們最好的選擇,但基于數據驅動的網站往往又很難用靜態頁面實現,那么將動態頁面生成html的工作或許就是一個很好的應用場合。另外,對于一些模板的套用,我們同樣可以用它來做。另外這本身也是插件編寫的方式。

最基本的動態編譯

.Net為我們提供了很強大的支持來實現這一切我們可以去做的基礎,主要應用的兩個命名空間是:System.CodeDom.Compiler和Microsoft.CSharp或Microsoft.VisualBasic。另外還需要用到反射來動態執行你的代碼。動態編譯并執行代碼的原理其實在于將提供的源代碼交予CSharpCodeProvider來執行編譯(其實和CSC沒什么兩樣),如果沒有任何編譯錯誤,生成的IL代碼會被編譯成DLL存放于于內存并加載在某個應用程序域(默認為當前)內并通過反射的方式來調用其某個方法或者觸發某個事件等。之所以說它是插件編寫的一種方式也正是因為與此,我們可以通過預先定義好的借口來組織和擴展我們的程序并將其交還給主程序去觸發。一個基本的動態編譯并執行代碼的步驟包括:

·         將要被編譯和執行的代碼讀入并以字符串方式保存

·         聲明CSharpCodeProvider對象實例

·         調用CSharpCodeProvider實例的CompileAssemblyFromSource方法編譯

·         用反射生成被生成對象的實例(Assembly.CreateInstance)

·         調用其方法

以下代碼片段包含了完整的編譯和執行過程:

代碼如下:
//get the code to compile

string strSourceCode = this.txtSource.Text;

 

// 1.Create a new CSharpCodePrivoder instance

CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();

 

// 2.Sets the runtime compiling parameters by crating a new CompilerParameters instance

CompilerParameters objCompilerParameters = new CompilerParameters();

objCompilerParameters.ReferencedAssemblies.Add("System.dll");

objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");

objCompilerParameters.GenerateInMemory = true;

 

// 3.CompilerResults: Complile the code snippet by calling a method from the provider

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清涧县| 宁波市| 常宁市| 饶阳县| 吉木乃县| 新邵县| 江陵县| 习水县| 门头沟区| 中西区| 宜州市| 虎林市| 扶余县| 濮阳市| 宾阳县| 西畴县| 富川| 呼伦贝尔市| 潞城市| 金寨县| 静宁县| 海盐县| 且末县| 祁连县| 涟源市| 罗源县| 会同县| 和平区| 射洪县| 常宁市| 利川市| 肃宁县| 宿松县| 渑池县| 鹰潭市| 镶黄旗| 武陟县| 崇明县| 封开县| 紫金县| 文登市|