关于动态载入DLL的一个问题

ifan_net 2008-12-19 11:41:58
各位前辈好!
小弟有这么个问题,关于动态载入DLL的。
首先我有一个 interface.cs 中定义了一个 interface
namespace demo
{
public interface IElement
{
void Print();
}
}
编译:csc /t:library /out:interface.dll interface.cs


然后有个 list.cs 实现了上面的 interface
namespace demo
{
public class List : IElement
{
public void Print()
{
System.Console.WriteLine("list");
}
}
}
编译:csc /t:library /out:list.dll /r:interface.dll list.cs

最后写了个测试程序:
using System;
using System.Reflection;

namespace demo
{
public class Program
{
static void Main()
{
Assembly ass = Assembly.LoadFrom("list.dll");
Type t = ass.GetType("demo.List");
IElement o = (IElement)Activator.CreateInstance(t);
o.Print();
}
}
}
编译:csc /r:interface.dll /out:program.exe program.cs

现在运行 program.exe,ok,没问题。


但是我现在想要这样编译:
csc /t:library /out:list.dll interface.cs list.cs
csc /out:program.exe interface.cs program.cs

然后我运行 program.exe,出错:
未处理的异常: System.InvalidCastException: 无法将类型为“demo.List”的对象强制
转换为类型“demo.IElement”。


请问这是为什么?怎么样才能达到我的需求啊?难道一定要用 /r:interface.dll 的方式吗,我是不想多出一个dll来。多不爽啊!
...全文
45 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ifan_net 2008-12-20
  • 打赏
  • 举报
回复
不是这样的,不过结贴算了。应该是appdomain相关的问题
Fibona 2008-12-20
  • 打赏
  • 举报
回复
/r:interface.dll 你不引用他,肯定报错了,

所以你要用一个IDE,VS2005中编译什么麻烦都没了

net5i 2008-12-19
  • 打赏
  • 举报
回复
搂主把下面这句:
IElement o = (IElement)Activator.CreateInstance(t);

改成:
IElement o = t.GetConstructor(new Type[] { }).Invoke(null) as IElement;

看看呢?

110,534

社区成员

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

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

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