簡體   English   中英

如何檢查 .Net dll 是否使用 COM 互操作服務?

[英]How can I check if a .Net dll makes use of COM interop services?

是否有命令行工具可以告訴我給定的 .Net 程序集是否使用 COM 互操作服務?

不使用 COM 互操作的示例:

internal class ServerClass { }

這樣做的例子:

[ComImport]
[Guid("114383E9-1969-47D2-9AA9-91388C961A19")]
internal class ServerClass { }

我懷疑答案是否定的。

但你可以建造一個。 從反編譯器的輸出開始,尋找 COM 互操作所特有的類型和方法的使用(例如Type.GetTypeFromProgID )。

似乎從 COM 導入的類和接口—— 這就是所有可以導入 COM的東西——可以用一個簡單的正則表達式(或findstr認為的正則表達式——注意轉義的空格,否則將被視為“或” - 即大多數正則表達式語言中的| ):

> ildasm /text NetClient.exe | findstr "\.class.*\ import "
.class interface private abstract auto ansi import NetClient.IServer
.class interface private abstract auto ansi import NetClient.Server
.class private auto ansi import beforefieldinit NetClient.ServerClass

我已經用一堆 dll 對此進行了測試,並且沒有誤報 - 我只希望也沒有誤報......

另外 - 感謝 Simon 在評論中 - CreateInstance() 可用於在運行時動態加載 dll,因此也應檢查它(這次使用grep而不是findstr ,因為后者的不尋常且有限的正則表達式語法):

> ildasm /text file.dll \
| grep -E 'call.*System.Activator|Reflection.Assembly)::CreateInstance'

NB ildasm應該隨Visual Studio一起安裝,並且在使用 Visual Studio開發人員命令提示符時最容易調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM