【发布时间】:2014-03-17 13:19:24
【问题描述】:
我的应用程序中有一个接口,以及几个扩展它的 DLL。该接口提供了一种简单的方法:
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 显示方法签名仍然相同:
我很好奇这里有什么问题。对混淆程序集的反射是否会以某种方式中断?以前有没有其他人遇到过这个错误?感谢您的任何见解。
更新
看起来这一行正在引发异常:
var instance = (ICustomConversion)Activator.CreateInstance(type);
【问题讨论】:
-
混淆是如何完成的?如果不执行,DLL 是否加载?
-
是的,对不起,我是想把它包括在内。如果我把未混淆的 DLL 扔进去,它可以正常工作
-
然后我会说混淆器不起作用
-
.pdb 文件是否也存在?只是想知道 ILSpy 是否也使用它来帮助它查看正确的名称
-
dll.GetTypes().First();返回什么类型?改用typeof(KnownType)
标签: c# reflection interface obfuscation