C# 具有一定条件的dll过滤
我用C#编写了很多dll,我知道其中使用的名称空间名称。我只需要获取使用sqlconnection.open()方法或在其中使用名称空间system.data.sqlclient的dll列表。是否有某种方法可以通过C#以编程方式完成此操作?尝试以下操作:C# 具有一定条件的dll过滤,c#,.net,dll,C#,.net,Dll,我用C#编写了很多dll,我知道其中使用的名称空间名称。我只需要获取使用sqlconnection.open()方法或在其中使用名称空间system.data.sqlclient的dll列表。是否有某种方法可以通过C#以编程方式完成此操作?尝试以下操作: class Program { static void Main(string[] args) { var methodsCallingDbConnectionOpen = AssemblyDefinition.
class Program
{
static void Main(string[] args)
{
var methodsCallingDbConnectionOpen = AssemblyDefinition.ReadAssembly(typeof(Program).Assembly.Location)
.MainModule
.GetTypes()
.SelectMany(type => type.Methods)
.Where(method => method.HasBody &&
method.Body.Instructions.Any(instruction =>
instruction.OpCode.Code == Code.Callvirt && instruction.Operand is MethodReference &&
((MethodReference)instruction.Operand).FullName.Contains("System.Data.Common.DbConnection::Open")));
foreach (var method in methodsCallingDbConnectionOpen)
{
Console.WriteLine(method);
}
Console.ReadLine();
}
static void Foo()
{
using (var connection = new SqlConnection())
{
connection.Open();
}
}
}
产生:
System.Void控制台应用程序1.Program::Foo()
注:
- 此示例使用
- 此示例检测对
DbConnection.Open的调用。要检测使用的是DbConnection的哪个后代,您必须查看以前的IL指令(例如,ctor调用)