日期:2014-05-18  浏览次数:20911 次

使用了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   的类型。


------解决方案--------------------
没用过dotfuscator
------解决方案--------------------
Type type = Type.GetType( GetUserInputString(), true );
你想要的Type是什么?你的GetUserInputString()是什么?混淆了就不要想根据类型名得到类型了。
------解决方案--------------------
UP
------解决方案--------------------
报什么异常呢?
------解决方案--------------------
是不是你得到的那个类不能实例化,比如说抽象类,静态类