我正在编写脚本语言,但我遇到了严重的问题。
我需要这样做才能用语言调用.NET DLL,但我发现在C#中没办法做到这一点。
有没有人知道如何以编程方式加载和调用.NET dll? (我不能只是添加引用所以不要这样说)
答案 0 :(得分:4)
我是这样做的:
Assembly assembly = Assembly.LoadFrom(assemblyName);
System.Type type = assembly.GetType(typeName);
Object o = Activator.CreateInstance(type);
IYourType yourObj = (o as IYourType);
其中assemblyName
和typeName
是字符串,例如:
string assemblyName = @"C:\foo\yourDLL.dll";
string typeName = "YourCompany.YourProject.YourClass";//a fully qualified type name
然后你可以在obj上调用方法:
yourObj.DoSomething(someParameter);
当然,您可以调用的方法由您的界面IYourType
...
答案 1 :(得分:2)
您可以使用Assembly.LoadFrom,从那里使用标准reflection来获取类型和方法(我假设您已经在脚本中执行此操作)。 MSDN页面(链接)上的示例显示了这一点:
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
// Obtain a reference to a method known to exist in assembly.
MethodInfo Method = SampleAssembly.GetTypes()[0].GetMethod("Method1");
// Obtain a reference to the parameters collection of the MethodInfo instance.
ParameterInfo[] Params = Method.GetParameters();
// Display information about method parameters.
// Param = sParam1
// Type = System.String
// Position = 0
// Optional=False
foreach (ParameterInfo Param in Params)
{
Console.WriteLine("Param=" + Param.Name.ToString());
Console.WriteLine(" Type=" + Param.ParameterType.ToString());
Console.WriteLine(" Position=" + Param.Position.ToString());
Console.WriteLine(" Optional=" + Param.IsOptional.ToString());
}
答案 2 :(得分:1)
听起来你需要使用Assembly.Load(Assembly.Load at MSDN)的重载之一。动态加载程序集后,可以使用System.Reflection,动态对象和/或接口/基类来访问其中的类型。