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