我们从.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定义。类似地,我有另一个继承自B类的C类,它对该方法有不同的定义。基本上重构以分享共同的逻辑。这在.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;
}
}
答案 0 :(得分:1)
使用Activator,它可以与使用以下平台(x86 / x64 /任何CPU)编译的.net Framework 4.0一起使用:
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var ass = Assembly.Load("ConsoleApplication1");
var type = ass.GetType("ConsoleApplication1.Test");
var obj = Activator.CreateInstance(type);
Console.ReadLine();
}
}
public class Test { }
}
答案 1 :(得分:1)
您必须使用fusion.dll
库来阅读GAC
。找到“完整程序集名称”后,您可以使用Reflection.[Assembly].Load()
代替Reflection.[Assembly].LoadWithPartialName()
。我写的文章解释了需要做什么:
http://www.codeproject.com/Articles/485145/Late-Binding-to-NET-objects-in-NET-4-0