2012-12-17 39 views
1

我正在爲在.NET框架上運行的語言編寫編譯器。我試圖爲導入語句生成代碼。基本上如何使用Reflection.Emit添加引用

import System.Drawing 

應該表現得像

using System.Drawing; 
在C#

。 import語句也將支持諸如:

import Foo.Bar in "foo.dll" 

這將導入foo.dll的Foo.Bar類。我的問題是如何將這些鏈接到使用Reflection.Emit生成的程序中?

謝謝。

回答

3

你只是:消耗庫。意思是說,你只需在你的發射代碼中使用foo.dll中的類型/方法。 Reflection.Emit包裝將自動添加必要的參考元數據。請注意,這意味着如果您的代碼導入庫並不使用它,則該生成的IL中不會存在該引用。其中有趣的是正好什麼C#編譯器也(也可能是VB的)。

+0

好吧,我需要使用foo.dll上的反射來抓取方法和類,並簡單地在發射的il中使用它們?還有一點很有趣,C#會這麼做,所以未使用的引用不會導入任何內容? – mirhagk

+0

@mirhagk是的,正是 –

+2

@mirhagk作爲一個額外的,你可能會發現值得看看IKVM.Reflection.dll;它具有相同的API,但有一些稍微好一點的能力,例如以完全隔離的方式加載程序集的能力,甚至允許爲不同的框架生成dll - 例如,爲WinRT,Silverlight,Windows Phone 7生成DLL,等等 - 全部來自.NET 2(或更高版本)的exe。 –