Jon*_*lis 2 c# reflection obfuscation interface
我的应用程序中有一个接口,以及几个扩展它的DLL.界面提供了一个简单的方法:
public interface ICustomConversion
{
string Namespace { get; }
string Code { get; }
int TotalCount { get; set; }
int ErrorCount { get; set; }
string ConvertList(string inputFileLocation);
}
Run Code Online (Sandbox Code Playgroud)
目标是允许将多个文件转换为我们的自定义格式.我通过反射基于用户选择加载DLL:
var dll = Assembly.LoadFrom(path);
var type = dll.GetTypes().First();
var instance = (ICustomConversion)Activator.CreateInstance(type);
return instance.ConvertList(filename);
Run Code Online (Sandbox Code Playgroud)
这一切在开发环境中都很有效.但是,在混淆之后,它无法加载dll,我不知道为什么.在混淆的DLL上使用ILSpy显示方法签名仍然相同:
我很好奇这里的问题是什么.对模糊组件的反思是否会以某种方式破坏?有没有其他人遇到此错误?感谢您的任何见解.
UPDATE
看起来这一行抛出异常:
var instance = (ICustomConversion)Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)
这一行只是获取DLL声明的第一个类型:
var type = dll.GetTypes().First();
Run Code Online (Sandbox Code Playgroud)
这不是好习惯.您应该根据某些条件选择类型.
混淆可能会改变程序集中类型的顺序(可能是由于名称更改).
我建议你这样做:
var type = dll.GetTypes().First(typeof(ICustomConversion).IsAssignableFrom);
Run Code Online (Sandbox Code Playgroud)
这将选择实现您的界面的第一种类型.
归档时间: |
|
查看次数: |
528 次 |
最近记录: |