C# 具有一定条件的dll过滤

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.

我用C#编写了很多dll,我知道其中使用的名称空间名称。我只需要获取使用sqlconnection.open()方法或在其中使用名称空间system.data.sqlclient的dll列表。是否有某种方法可以通过C#以编程方式完成此操作?

尝试以下操作:

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调用)

试试这个->我收到一个错误,因为'Mono.Cecil.AssemblyDefinition'不包含'ReadAssembly'的定义,你能告诉我你使用了哪个版本的Mono吗it@GowthamanSS,我通过NuGet添加了对Cecil的引用,没有下载Mono:。如果您使用的是2010年以前的VS,您可以从其Github页面下载Cecil:我刚刚将“System.Data.Common.DbConnection::Open”替换为“System.IO.File::Create”,以找出使用Create方法的方法,但它会给我带来一个错误。您能不能告诉我mei没有任何异常?它没有读取包含File.Create()的方法名称里面的方法