关于assembly动态加载的问题

qwer9947 2008-11-30 11:58:50
我的程序中需要动态加载另一个assembly(只知道它的绝对地址,如C:\XXX\YY\MyAssembly.dll),而且知道它里有一个含有MyAttribute属性的类(类的名字并不知道,只知道它有MyAttribute属性)。

我在我的程序中改如何动态加载这个assembly,并且创建那个我所需要的类的一个实例?(就是那个有MyAttribute属性的类的一个实例)

thanks
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwer9947 2008-12-01
  • 打赏
  • 举报
回复
创建了就行了,因为我知道它实现了一个特定的接口。

thanks
winxieddd 2008-11-30
  • 打赏
  • 举报
回复
创建了有什么用?
如果要调用类的方法,不还得动态反射调用?
acqy 2008-11-30
  • 打赏
  • 举报
回复

Assembly assembly = Assembly.Load("xxxxxx");
foreach (Type type in assembly.GetExportedTypes())
{
if (type.IsClass)
{
object[] attributes = type.GetCustomAttribute(typeof(MyAttribute), false);
if (attributes != null && attributes.Length > 0)
{
return Activator.CreateInstance(type);
}
}
}
return null;
king19840811 2008-11-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 HDNGO 的回复:]
ass = Assembly.LoadFrom(@"G:\C#Test\MyTest\MyTest\bin\Release\MyTest.dll");
ass = Assembly.Load("MyTest");

type = ass.GetType("MyTest.ReflectTest");

MethodInfo method = type.GetMethod("WriteString");
obj = ass.CreateInstance("MyTest.ReflectTest");

string s = (string)method.Invoke(obj, new string[] { "测试" });
Console.WriteLine(s);
System.Threading.Thread.Sleep(1000);
[/Quote]
原理和这个差不多的
qwer9947 2008-11-30
  • 打赏
  • 举报
回复
我不知道类名的,只知道这个类有MyAttribute属性,改怎么做?
sunshine_anycall 2008-11-30
  • 打赏
  • 举报
回复
没有类名,实例化那个类
不能实例化类,怎么能得到那个属性
HDNGO 2008-11-30
  • 打赏
  • 举报
回复
ass = Assembly.LoadFrom(@"G:\C#Test\MyTest\MyTest\bin\Release\MyTest.dll");
ass = Assembly.Load("MyTest");

type = ass.GetType("MyTest.ReflectTest");

MethodInfo method = type.GetMethod("WriteString");
obj = ass.CreateInstance("MyTest.ReflectTest");

string s = (string)method.Invoke(obj, new string[] { "测试" });
Console.WriteLine(s);
System.Threading.Thread.Sleep(1000);
wang852963 2008-11-30
  • 打赏
  • 举报
回复
System.Reflection.Assembly ass=System.Reflection.Assembly.LoadFile(@"C:\XXX\YY\MyAssembly.dll")
AppDomain app=System.AppDomain.CreateDomain("newapp");
object obj= app.CreateInstanceAndUnwrap(ass.GetName(), "类名");
可以通过遍历出类名后,然后通过上面的方法进行判断类的属性是否为你想要的,然后再获取类名。相应的操作其实例。

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧