首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查.Net dll是否使用了COM互操作服务?

如何检查.Net dll是否使用了COM互操作服务?
EN

Stack Overflow用户
提问于 2022-06-08 07:32:51
回答 2查看 100关注 0票数 0

是否有命令行工具告诉我给定的.Net程序集是否使用COM互操作服务?

不使用COM互操作的示例:

代码语言:javascript
复制
internal class ServerClass { }

例如:

代码语言:javascript
复制
[ComImport]
[Guid("114383E9-1969-47D2-9AA9-91388C961A19")]
internal class ServerClass { }
EN

回答 2

Stack Overflow用户

发布于 2022-06-08 07:38:47

我想答案是否定的。

但你可以造一个。从反编译程序的输出开始,寻找COM互操作特有的类型和方法的使用(例如。Type.GetTypeFromProgID)。

票数 1
EN

Stack Overflow用户

发布于 2022-06-08 08:37:09

从COM和这就是所有可以导入的COM。导入的类和接口似乎可以使用一个简单的正则表达式(或findstr所认为的正则表达式--注意转义的空间,否则会被用作"OR“--即大多数正则表达式中的| )来表示:

代码语言:javascript
复制
> 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,因此也应该检查它(由于后者的不寻常和有限的regexp语法,这次使用grep而不是findstr ):

代码语言:javascript
复制
> ildasm /text file.dll \
| grep -E 'call.*System.Activator|Reflection.Assembly)::CreateInstance'

N.B. ildasm应该随Visual一起安装,并且在使用Visual命令提示符时最容易调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72541714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档