使用了dotfuscator混淆其,又使用了动态实力化对象,遇到了bug!
一切都是按照微软的说明来实现,利用接口,然后排除它的所有的实现类,还是抱Activator.CreateInstance(type); 有错误,头都大了
我用的 dotfuscator是4.0版本的,做的Pocketpc开发,其他的没有试
以下是微软的说明
===========================================================================
在 .NET 结构中,反射和动态类加载是功能极其强大的工具。此级别的运行时程序自定义会使 Dotfuscator 无法绝对无误地确定重命名加载到给定程序中的所有类型是否安全。
请看以下 (C#) 代码片段:
public object GetNewType() {
Type type = Type.GetType( GetUserInputString(), true );
object newInstance = Activator.CreateInstance( type );
return newInstance;
}
此代码按名称加载类型,并动态地对其进行实例化。另外,该名称来自用户输入的字符串!(或者,来自运行时数据库或另一个程序等。)
显然,Dotfuscator 无法预知用户会输入哪些类型名称。解决办法是将所有潜在可加载类型的名称排除在外(请注意,仍然可以执行方法和字段的重命名操作)。正是在这种情况下,手动用户配置(以及有关要使用 Dotfuscator 处理的应用程序的某些知识)可以起到重要作用。
通常,情况不太严重。请看一个微小的变化情况:
public MyInterface GetNewType() {
Type type = Type.GetType( GetUserInputString(), true );
object newInstance = Activator.CreateInstance( type );
return newInstance as MyInterface;
}
现在,可以立即清楚地看出,只有这些类型的一个子集需要排除:即那些实现 MyInterface 的类型。
------解决方案--------------------up
------解决方案--------------------先占沙发
------解决方案--------------------T M D 只能坐板凳了!
------解决方案--------------------public object GetNewType() {
Type type = Type.GetType( GetUserInputString(), true );
object newInstance = Activator.CreateInstance( type );
return newInstance;
}
-------------------------------------
GetUserInputString()这个方法在那,怎么实现在的
------解决方案--------------------不懂,学习中,帮你顶一下
------解决方案--------------------只能帮顶了!
------解决方案--------------------搂主能否给一个dotfuscator
reddust@126.com
万分感谢!
------解决方案--------------------lz贴出具体的代码!不然的话就不好找了!
------解决方案--------------------坐个角落学习。
------解决方案--------------------Type type = Type.GetType( GetUserInputString(), true );
?
------------
Type.GetType似乎只能加载本程序集中定义的类
如果你要初始化的类在其他程序集中,需要先加载这个程序集 然后在这个程序集中创建类