【发布时间】:2012-10-29 11:46:13
【问题描述】:
我们从 .NET 3.5 升级到 .NET 4.0,现在 System.Refelection.Assembly.CreateInstance 似乎无法正常工作。有没有其他人有这个问题?有没有办法解决它?下面是我们如何加载程序集的示例。它返回一个空值。没有例外。它是在 GAC 中注册的 .NET 程序集。它不是 COM 对象。
Assembly assembly = Assembly.LoadWithPartialName("AssemblyName");
object instance = assembly.CreateInstance("Namespace.Class",
false,
BindingFlags.CreateInstance,
null,
null, null, null);
我缩小了问题的原因。我正在尝试创建的 A 类继承自 B 类。B 类被定义为公共抽象类 B。B 类包含大部分逻辑以及 A 类定义的一种抽象方法。同样,我有另一个类 C,它继承自 B 类,它对该方法有不同的定义。基本上重构以共享通用逻辑。这在 .NET 3.5 中有效,但在 .NET 4.0 中,我最终将异常范围缩小为“{”无法创建抽象类。“}”。
public abstract class A
{
public string InvokeUI()
{
//some logic
DisplayUI();
}
protected abstract void DisplayUI();
}
public class B : A
{
protected override DisplayUI()
{
Some logic;
}
}
【问题讨论】:
-
您可以尝试使用融合日志来查看幕后发生的情况:msdn.microsoft.com/en-us/library/e74a18c4(v=vs.80).aspx
-
Assembly.LoadWithPartialName() 自 .NET 2.0 以来已过时。是时候开始使用 Load()了。
-
类必须有默认构造函数。
标签: c# reflection .net-4.0