繁体   English   中英

Activator.CreateInstance上的TargetInvocationException

[英]TargetInvocationException on Activator.CreateInstance

我在使用Reflection实例化DLL文件中定义的类时遇到了一些麻烦。 即使代码看起来很好,我在Activator.CreateInstance上得到了TargetInvocationException。 代码如下(现在只有一个DLL可用):

public Comparator() 
{
    string[] filePaths = Directory.GetFiles(@".\Extensions");
    for (int i = 0; i < filePaths.Length; ++i)
    {
        var asm = Assembly.LoadFrom(Path.GetFullPath(filePaths[i]));

        if (asm != null)
        {
            foreach (Type currType in asm.ExportedTypes)
            {
                if (!currType.IsAbstract && currType.IsPublic && typeof(SorterBase).IsAssignableFrom(currType))
                {
                    Debug.WriteLine(currType); //outputs: BubbleSort.Sorter
                    var instance = Activator.CreateInstance(currType); //TargetInvocationException
                }
            }
        }
    }
}

这是我试图实例化的类:

using SortingLibrary;
using SortingFunctions;
namespace BubbleSort
{
    public class Sorter : SorterBase //SorterBase is an abstract class defined in SortingLibrary
    {
        public Sorter()
        {
            SetFunction(Sorting.BubbleSort);
            AlgorithmName = @"Bubble Sort";
        }
    }
}

我设法防止该问题发生的唯一方法是在编译之前将加载的.dll添加到引用。 问题是,通常在编译期间无法确定需要加载哪些库。 我在这里错过了什么?

整个解决方案(虽然目前有点乱)可以在这里下载: http//nazr.in/rOD

任何帮助将非常感谢! 先感谢您。

您必须将所有依赖项复制到Extensions文件夹。 在您的情况下,您缺少BubbleSort.dll依赖的SortingFunctions.dll。 它反映在内部异常中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM