C# .NET/C-Reflection-System.IO.File是否使用过

C# .NET/C-Reflection-System.IO.File是否使用过,c#,.net,reflection,C#,.net,Reflection,是否有一种方法可以使用反射来完全扫描程序集,以查看是否使用过System.IO.File或System.IO.Directory?这些只是示例类。只是想知道是否有一种方法可以通过反射和代码分析来实现 更新: 请参阅注释。您可以通过Assembly.GetExecutionGassembly.GetReferencedAssembly获得相关程序集的列表。我不相信您可以通过反射来理解名称空间的用法。尝试查看System.CodeDom。这可能会帮助您解析代码。我建议您查看一下。使用Cecil,您可

是否有一种方法可以使用反射来完全扫描程序集,以查看是否使用过System.IO.File或System.IO.Directory?这些只是示例类。只是想知道是否有一种方法可以通过反射和代码分析来实现

更新:
请参阅注释。您可以通过Assembly.GetExecutionGassembly.GetReferencedAssembly获得相关程序集的列表。我不相信您可以通过反射来理解名称空间的用法。尝试查看System.CodeDom。这可能会帮助您解析代码。

我建议您查看一下。使用Cecil,您可以枚举所有的类、方法甚至IL指令,包括所有的方法调用。

我不记得在哪里,但我找到了这段方便的代码:

它向MethodInfo/ConstructorInfo添加了一个扩展方法,该方法将ILByteArray解析为指令对象

因此,您可以循环程序集中的每个MethodInfo/ConstructorInfo,然后循环该MethodInfo/ConstructorInfo上的每个指令,并检查这些指令对象中是否有任何一个包含一个操作数,该操作数是MemberInfo的一个实例,其DeclaringType等于任何一个类。

可以这样做,或者类似的东西。前几天,我检查了一个特定的类型是在哪里使用的


ReSharper也可能有帮助。我一直用我自己的符号来做这件事——我想它也适用于.NET Framework类型。

奇妙的独立工具将为您提供这种依赖信息

在NDepend中加载dll,然后使用GUI查找所需内容,或者使用以下CQL查询:

SELECT TYPES WHERE IsDirectlyUsing "System.IO.File"

你应该得到一个使用这个的所有类型的列表。

正如Tommy Carlier所建议的,它很容易使用


我不太感兴趣的是使用System.IO,而是使用了类System.IO.File。我不认为仅仅因为答案可能是错误的,就有理由给它一个负面分数。我投票将其设置为0。我认为它来自于您也可以具有间接依赖项,如SELECT TYPES WHERE IsUsing System.IO.File,您将获得类,如A使用B使用C。。。使用System.IO.FileI从dailybuilds下载了monocharge-20090414.tar.gz,但没有看到Mono.Cecil.dll。Mono.Cecil命名空间现在在另一个程序集中吗?它在monocharge/1.0/Mono.Cecil.dllah ha中。。。好啊谢谢伟大的项目。我从dailybuilds下载了monocharge-20090414.tar.gz,但没有看到Mono.Cecil.dll。Mono.Cecil命名空间现在在另一个程序集中吗?
using Mono.Cecil;

// ..

var assembly = AssemblyFactory.GetAssembly ("Foo.Bar.dll");
var module = assembly.MainModule;

bool references_file = module.TypeReferences.Contains ("System.IO.File");