2013-04-27 36 views
0

我有一個C#庫項目針對Windows 8生成的元數據(「綁定」庫)爲單聲道

我想建立一個工具,將採取類似行動,以什麼tblimp作用:

  1. 查看庫(DLL)中的所有公共類型。
  2. 將這些導出到一個新的「包裝器」DLL中(方法體將留空,儘管可以配置此行爲)。

新生成的DLL可以在其他不支持原始DLL的項目中引用(僅僅爲了構建項目,因爲這些方法本身不包含任何功能)。

主要優點是使用生成的DLL作爲對Mono項目的引用。

有沒有任何工具可以做到這一點?

+0

原始DLL是.NET-DLL還是其他類型的DLL?哪些項目是不能引用原始DLL的項目?他們是.NET項目還是其他類型的項目? – 2013-04-27 13:06:23

+0

我想採取一個Windows應用商店庫DLL(C#)幷包裝所有的代碼,以便它可以從Mono引用。 – 2013-04-27 15:09:50

回答

1

我認爲這是可能的,如果你可以使用Mono.Cecil來解析原始dll(如果在某些情況下失敗,你可能需要修補Cecil)。然後用你在內存中獲得的對象,你可以生成你需要的任何程序集磁盤,併爲你的目的使用生成的程序集。

有基於塞西爾許多開源項目,可能導致你在這條道路,如Obfuscar(一個開源的混淆),

http://obfuscar.codeplex.com/

0

現在我做同樣的 - 我創建一個名爲Piranha的工具可以刪除所有代碼和所有非公開成員,只留下一個「骨架」。 使得生成的庫符合CLS並不容易。 構造函數有問題:構造函數需要調用基類型構造函數。但是如果它調用的構造函數是內部的呢? 結構有問題:看起來你不能刪除所有私人領域,因爲結構的大小需要被知道(對於可驗證的裝配)。

但是創建一個骨架庫是不夠的。您還需要重新映射/刪除引用。您的Windows 8庫引用WinRT庫,並且不會被Mono庫消耗。你必須用一些配置文件替換WinRT庫引用,最可能的情況是用PCL引用。我還沒有完成這部分。

還有其他的參考庫。他們會將他們特定於平臺的參考文件與他們一起拖放因此,我們需要刪除這些引用(以及所有依賴於這些庫中的類型的成員),或者將這些庫轉換爲框架(並重新映射引用)。

如果你對這樣的工具感興趣,我會在幾天內創建一個GitHub倉庫,並在那裏發佈代碼。

+0

我很確定我們都這樣做是出於不同的原因......你有什麼用途這樣的工具/ – 2013-05-28 06:21:20