这是一个问题我以前问的扩展这里 。
长话短说,我动态加载DLL并做出type
出它与下面的代码:
Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
Activator.CreateInstance(type);
从那里,我可以使用type
引用在几乎任何dllTest
类。 默认情况下,该上课的时候跑应该弹出一个表格(在这种情况下,相当空白的,所以它并不复杂)。
我觉得我缺少的代码在这里,就是维持的形式加载在屏幕上重点线。
dllTest.cs
(DLL中)组成:
namespace test
{
public partial class dllTest : Form
{
public dllTest()
{
InitializeComponent();
}
}
}
InitializeComponent()
设置的形式,这是远远太长,贴在这里,不应该有所作为的布局。
有任何想法吗?
你必须做你刚刚创建的形式的东西:
Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
Form form = (Form)Activator.CreateInstance(type);
form.ShowDialog(); // Or Application.Run(form)
是的,你实际上并没有指定任何代码的类初始化之外运行。 例如,对于形式你必须真正显示它们。
你可以修改你的代码如下...
Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
Form form = Activator.CreateInstance(type) as Form;
form.ShowDialog();
如果一个类属于Form
,则Assembly.GetType()
返回NULL
。 如果一个类属于User Control
,然后我可以看到,类型返回。
另外,语法应为:
Type type = assembly.GetType("Assemblytest.clsTest");
哪里
-
clsTest
将类的名称(用户控制的) -
Assemblytest
是组装的,而不该.dll extention名称。
我会去的:
Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
object obj = Activator.CreateInstance(type);
Form form = obj as Form;
if (form != null)
form.Show(); //or ShowDilaog() whichever is needed
其它错误检查/处理应增加; 但是起码我会确保改建工程。