2010-10-15 67 views
1

我將不得不生成很多extern,這樣我就可以從另一種編程語言的.NET框架與我正在開發的開源項目進行交互。我想知道是否有任何方法將所有的MSDN類引用作爲XML或其他東西?我正在考慮解析實際的HTML,但看起來它不會很直接,所以我想知道是否有更好的方法來做到這一點。自動化.NET框架類引用

我可以從他們那裏得到的最詳細的信息越多越好。因此,例如,如果它在Compact Framework上工作,或版本差異,能夠得到很好。

非常感謝!

+0

「MSDN類引用」:你的意思是文檔?這是否可以用語言提供方法語法? – Richard 2010-10-15 12:42:38

+0

是的!我正在擴展一個編譯器來支持C#目標。所以這意味着我必須編寫所有的外部代碼,以便能夠與現有的C#代碼進行交互。現在對我來說最好的選擇是閱讀整個MSDN HTML文檔並解析它們。但我現在正在尋找更好的方法來做到這一點。 – Waneck 2010-10-15 13:20:14

回答

2

示例代碼(直接在這個答案寫的,你必須修改它):

//Will load your assembly and all .Net core assemblies. 
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    Console.WriteLine("Going through " + assembly.Location); 
    foreach(var type in assembly.GetTypes()) 
    { 
     Console.WriteLine("Type " + type.FullName + " has the following methods:"); 
     for (var method in type.GetMethods()) 
     { 
      // you can create another loop to go through all method arguments. 
      Console.WriteLine(method.Name); 
     } 
    } 
} 

要經過的所有組件,只需使用Directory.GetFiles()在C中的所有子目錄:\ Windows下\ Microsoft.Net \ Assembly \ GAC_MSIL和Assembly.Load它們。

+0

嘿!謝謝!這段代碼非常有用! – Waneck 2010-10-15 13:23:05

+0

但我仍然希望找到一種方法來閱讀實際的文檔文件,所以我可以在許多框架版本中找到差異! – Waneck 2010-10-15 13:23:59

+1

框架版本不是問題,你可以用assembly.ImageRuntimeVersion找到它。 – jgauffin 2010-10-15 13:28:18

1

您是否看過Pinvoke.net,這是一個完整的與外部窗口DLL(包括用於Compact Framework的Windows CE DLL)接口的網站。

對於非Windows DLL互操作,Pinvoke Interop Assistant可幫助您找出用於與非受管DLL進行對話的extern。

2

你可以在DLL上使用反射來獲取類,方法參數等的列表。我認爲這是你最終需要的。

看看這裏瞭解更多信息:http://msdn.microsoft.com/en-us/library/ms173183(VS.80).aspx

你可以很容易地編寫一些Net代碼對類數據打印出來,甚至用它在另一種語言來自動生成代碼。

我不知道你打算怎麼處理這個。當然,如果你想使用.Net框架,那麼在.Net中使用它是有意義的。如果你想要開放源代碼,你看看莫諾(http://www.mono-project.com/Main_Page)?

+0

嘿!謝謝你的提示。我真的可以像使用反射一樣查看mscorlib。但問題是,我將使用特定於我正在使用的.dll的代碼。也許這是一個選項,可以讀取不同版本(包括單聲道)中的所有.dll文件並將其差異分類。但是如果已經有某種機器準備的doc文件,它會容易得多;)。 – Waneck 2010-10-15 13:22:27