2010-11-16 73 views
4

通過使用IronRuby v1.1.x在VS2010中創建IronRuby項目後,我通過導入它們幾乎可以使用.NET庫。但實際上不能將ironruby編譯成exe/DLL。 我看到構建選項,但不能從IronRuby項目構建任何exe或DLL。請幫忙 !我可以將VS2010中的IronRuby項目編譯成DLL/exe文件嗎?

+0

http://stackoverflow.com/questions/561509/how-do-i-create-a-net-assembly-in-ironpython-的重複並從c調用它。 (不是一個嚴格的副本,但答案是一樣的。) – cdhowie 2010-11-16 04:12:43

+0

但如何編譯成.NET程序集仍然沒有線索?而這次是IronRuby而不是IronPython。 – 2010-11-16 04:22:20

+0

這是因爲它本身不可能。並沒有關係;你不能這樣做,因爲IronRuby和IronPython都使用DLR。實際的語言根本無關緊要。 – cdhowie 2010-11-16 06:10:10

回答

4

您無法將IronRuby類編譯爲.NET程序集,然後從另一個程序集中訪問它們。

Preet是正確的,你可以得到的是將IronRuby腳本嵌入(比方說)一個C#程序集。從C#端可以實例化你的Ruby類。因此,考慮下面的Ruby類:

class HelloWorld 
    def say_hello 
    puts 'Hello' 
    end 
end 

你可以從一個資源文件加載這個和C#運行:

using Microsoft.Scripting.Hosting; 
using Microsoft.Scripting.Runtime; 
using IronRuby; 

var runtime = IronRuby.Ruby.CreateRuntime(); 
var engine = runtime.GetEngine("ruby"); 

var assembly = Assembly.GetExecutingAssembly(); 
var stream = assembly.GetManifestResourceStream("PathToResource.test.rb"); 
string code = new StreamReader(stream).ReadToEnd(); 

var scope = engine.CreateScope(); 
engine.Execute(code, scope); 

dynamic helloWorldClass = engine.Runtime.Globals.GetVariable("HelloWorld"); 
dynamic ironRubyObject = engine.Operations.CreateInstance(helloWorldClass); 
ironRubyObject.say_hello(); 
+1

如果Visual Studio可以將IronRuby代碼編譯爲EXE,那將會很棒。 – 2011-10-07 22:32:51

0

由於Iron Ruby僅僅是基於DLR的代碼。您應該能夠將代碼添加到任何程序集的資源中。最終你需要一個引導來加載代碼。這很可能是CLR語言。

+0

這是否意味着我必須獲取IronRuby源代碼並將其與我的Ruby項目鏈接並使用.NET進行編譯? – 2010-11-16 04:19:03

5

有一個偉大的IronRuby的寶石,包IronRuby的文件到一個Windows可執行文件。

https://github.com/kumaryu/irpack

要使用:

igem install irpack 
irpack -o Program.exe Program.rb 
相關問題