gpt4 book ai didi

c# - Activator.CreateInstance 上的 TargetInvocationException

转载 作者:行者123 更新时间:2023-12-04 00:37:12 24 4
gpt4 key购买 nike

我在使用反射实例化 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。它反射(reflect)在内部异常中。

关于c# - Activator.CreateInstance 上的 TargetInvocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com