2008-09-23 228 views
6

我想在我的應用程序中運行javascript/Python/Ruby。在C#中運行腳本

我有一個基於用戶定義自動創建過程的應用程序。該過程在C#中生成。我想讓高級用戶在預定義位置插入腳本。這些腳本應該從C#進程運行。 例如,創建的進程將會有一些活動,並且在中間應該運行腳本,然後過程像以前一樣繼續。 有沒有從C#運行這些腳本的機制?

回答

5

基本上,你有兩個問題:如何在生成的代碼中定義注入點,以及如何從那裏運行python/ruby​​/whatev腳本。

根據您如何生成過程,一種可能的解決方案是將函數添加到每個可能的注射點。該函數將檢查用戶是否已將任何腳本與給定點相關聯,如果是,則通過調用IronPython/IronRuby(帶有可選參數)來運行腳本。

缺點包括:從腳本到創建過程的可訪問性有限(基本上,只有變量作爲參數傳遞才能被訪問);以及實施限制(IronPython當前版本省略了幾個基本的系統功能)。

1

您可以使用CSharpCodeProvider類從C#應用程序中編譯C#代碼。

如果編譯成功,您可以運行所得到的組件經由CompilerResults類的CompiledAssembly屬性返回。

2

研究IronPython和IronRuby - 這些將允許您輕鬆地與C#進行互操作。

0

您可以將「運行中」的C#代碼編譯爲內存中的程序集。我認爲IronPython和IronRuby也可以這樣做。看看CodeDomProvider.CreateProvider的方法。

如果您需要大量運行腳本,或者如果您的進程運行很長時間,則可能需要將這些程序集加載到另一個AppDomain中。在完成腳本後卸載AppDomain。否則,您無法將其從內存中移除。這對您的項目中的其他課程有一些影響,因爲您必須編組所有呼叫。

1

非常棒的C#腳本語言 - Script.Net

+0

這很酷。我本來可以使用類似的東西。 – mattlant 2008-09-24 13:34:58

1

。NET有一種腳本語言,包括PowerShell中的運行時引擎,可以嵌入到任何.NET應用程序中。