gpt4 book ai didi

c# - 混淆的 DLL 未通过反射加载

转载 作者:行者123 更新时间:2023-12-02 16:24:27 25 4
gpt4 key购买 nike

我的应用程序中有一个接口(interface),以及几个扩展它的 DLL。该接口(interface)提供了一种简单的方法:

public interface ICustomConversion
{
string Namespace { get; }
string Code { get; }

int TotalCount { get; set; }
int ErrorCount { get; set; }

string ConvertList(string inputFileLocation);
}

目标是允许将多个文件转换为我们的自定义格式。我通过反射根据用户选择加载 DLL:

 var dll = Assembly.LoadFrom(path);
var type = dll.GetTypes().First();
var instance = (ICustomConversion)Activator.CreateInstance(type);
return instance.ConvertList(filename);

这一切在开发环境中都运行良好。然而,混淆后,它无法加载dll,我不知道为什么。在混淆的 DLL 上使用 ILSpy 显示方法签名仍然相同:

ILSpy

我很好奇这里出了什么问题。对混淆的程序集的反射是否会以某种方式破坏?以前有其他人遇到过这个错误吗?感谢您的任何见解。

更新

看起来这一行抛出了异常:

var instance = (ICustomConversion)Activator.CreateInstance(type);

最佳答案

这一行只是获取 DLL 声明的第一个类型:

var type = dll.GetTypes().First();

这不是一个好的做法。您应该根据某些标准选择类型。

混淆可能会更改程序集中类型的顺序(可能是由于名称更改)。

我建议您这样做:

var type = dll.GetTypes().First(typeof(ICustomConversion).IsAssignableFrom);

这将选择第一个实现您的接口(interface)的类型。

关于c# - 混淆的 DLL 未通过反射加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455390/

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