我想在我的應用程序中運行javascript/Python/Ruby。在C#中運行腳本
我有一個基於用戶定義自動創建過程的應用程序。該過程在C#中生成。我想讓高級用戶在預定義位置插入腳本。這些腳本應該從C#進程運行。 例如,創建的進程將會有一些活動,並且在中間應該運行腳本,然後過程像以前一樣繼續。 有沒有從C#運行這些腳本的機制?
我想在我的應用程序中運行javascript/Python/Ruby。在C#中運行腳本
我有一個基於用戶定義自動創建過程的應用程序。該過程在C#中生成。我想讓高級用戶在預定義位置插入腳本。這些腳本應該從C#進程運行。 例如,創建的進程將會有一些活動,並且在中間應該運行腳本,然後過程像以前一樣繼續。 有沒有從C#運行這些腳本的機制?
基本上,你有兩個問題:如何在生成的代碼中定義注入點,以及如何從那裏運行python/ruby/whatev腳本。
根據您如何生成過程,一種可能的解決方案是將函數添加到每個可能的注射點。該函數將檢查用戶是否已將任何腳本與給定點相關聯,如果是,則通過調用IronPython/IronRuby(帶有可選參數)來運行腳本。
缺點包括:從腳本到創建過程的可訪問性有限(基本上,只有變量作爲參數傳遞才能被訪問);以及實施限制(IronPython當前版本省略了幾個基本的系統功能)。
您可以使用CSharpCodeProvider類從C#應用程序中編譯C#代碼。
如果編譯成功,您可以運行所得到的組件經由CompilerResults類的CompiledAssembly屬性返回。
研究IronPython和IronRuby - 這些將允許您輕鬆地與C#進行互操作。
您可以將「運行中」的C#代碼編譯爲內存中的程序集。我認爲IronPython和IronRuby也可以這樣做。看看CodeDomProvider.CreateProvider的方法。
如果您需要大量運行腳本,或者如果您的進程運行很長時間,則可能需要將這些程序集加載到另一個AppDomain中。在完成腳本後卸載AppDomain。否則,您無法將其從內存中移除。這對您的項目中的其他課程有一些影響,因爲您必須編組所有呼叫。
您是否想過Visual Studio for Applications?自.NET 1.1以來,我還沒有聽說過它,但它可能值得一看。
我正是這樣做只是最近 - 允許運行時除了C#腳本。
這是不難的,而這篇文章:
http://www.divil.co.uk/net/articles/plugins/scripting.asp
是細節非常有用的總結。
非常棒的C#腳本語言 - Script.Net
。NET有一種腳本語言,包括PowerShell中的運行時引擎,可以嵌入到任何.NET應用程序中。
這很酷。我本來可以使用類似的東西。 – mattlant 2008-09-24 13:34:58