0

私はC#で書かれたたくさんのdllを持っていて、それに使用されている名前空間名を知っています。sqlconnection.open()メソッドを使用するか、名前空間system.data.sqlclientを使用するdllのリストを取得する必要があります。C#でプログラムで実行する方法はありますか?

4

1 に答える 1

1

これを試して:

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 ConsoleApplication1.Program::Foo()

ノート:

  • このサンプルでは、Mono.Cecil​​.
  • このサンプルは への呼び出しを検出しますDbConnection.Open。DbConnection のどの子孫が使用されているかを検出するには、以前の IL 命令 (ctor 呼び出しなど) を調べる必要があります。
于 2012-08-09T12:22:45.803 に答える