【发布时间】:2018-10-01 17:32:10
【问题描述】:
我输入了一个托管程序集“some.dll”、一个函数名和它作为参数的类型。如何在运行时使用 .NET C# 4.6 应用程序找到这样的功能?
【问题讨论】:
-
“在运行时找到它”是什么意思?
-
你需要更好地解释你拥有什么以及你想做什么。即使作为英语问题,这也完全不清楚
标签: c# dll reflection runtime
我输入了一个托管程序集“some.dll”、一个函数名和它作为参数的类型。如何在运行时使用 .NET C# 4.6 应用程序找到这样的功能?
【问题讨论】:
标签: c# dll reflection runtime
如果我理解正确,您正在寻找反思
这是一个完全不切实际的例子。不过
给定
// Assembly1.dll
namespace TestAssembly
{
public class Main
{
public void Run(string parameters)
{
// Do something...
}
public void TestNoParameters()
{
// Do something...
}
}
}
你可以做到
public object Test(string methodName)
{
var assembly = Assembly.LoadFile("...Assembly1.dll");
var type = assembly.GetType("TestAssembly.Main");
if (type == null)
{
return null;
}
var methodInfo = type.GetMethod(methodName);
if (methodInfo == null)
{
return null;
}
var parameters = methodInfo.GetParameters();
var classInstance = Activator.CreateInstance(type, null);
if (parameters.Length == 0)
{
methodInfo.Invoke(classInstance, null);
}
else
{
var parametersArray = new object[] { "Hello" };
return methodInfo.Invoke(classInstance, parametersArray);
}
return null;
}
注意:您也可以以编程方式迭代内容并启发式地找到您正在寻找的类和方法
【讨论】: