2009-10-06 16 views
1

以下面的函數爲例:包括不斷變化的代碼爲活動計劃

void Changing(string var1, string var2, string var3) 
{ 
} 

我已經寫在.txt文件中的代碼,我希望它是動態加載到該功能。每次調用函數時,代碼可能都會有所不同。我怎麼能這樣做?

  1. 代碼是在文本文件在磁盤上
  2. 代碼應該是動態加載不停止執行程序
  3. 代碼應該是從一開始加載代碼沒有區別,應該假裝好像它是永遠存在的。
  4. 要執行的文件的位置包含在var1中。
+0

這種味道像做家庭作業,或精心製作的注射漏洞。 – JohnFx 2009-10-07 04:17:08

回答

5

你不能100%地假裝它從一開始就在那裏;你將不得不解決它。

如果代碼是在外部的文本文件,你有多種選擇:

  • 使用CSharpCodeProvider編譯代碼在運行時;你需要添加額外的絨毛使其成爲一個明確定義的類(大概實現一個通用接口);然後使用反射來創建類型的實例; yeuch - 和提防你不能卸載等
  • 等到.NET 5.0,並希望編譯器作爲一種服務保持
  • 使用單聲道,其中編譯器作爲一種服務already exists
  • 運行外部文件(例如)通過IronPython的Python腳本(注意,這改變了腳本語言)

我想看看最後一個選項(IronPython的)第一......似乎是本作工作。

+0

+1用於提示單聲道編譯器。 – 2009-10-06 05:15:49

+0

對於您提供的很多選項而言+1。 – 2009-10-06 05:17:38

0

您可以嘗試使用腳本語言,如Luaboo。我沒有實現這些,但已經看到類似的東西在Java中工作。