Dotfuscator WP7版和EnumExtention:友谊不起作用

时间:2012-07-06 09:39:34

标签: c# windows-phone-7.1 dotfuscator class-extensions

在我们的应用程序中,我们有Enum

的扩展名
namespace System
{
    /// <summary>
    /// Contains extention methods for emuns.
    /// </summary>
    public static class EnumExtention
    {
        /// <summary>
        /// Check is value has flag.
        /// </summary>
        /// <param name="value">Checked value</param>
        /// <param name="checkedFlag">Checked flag.</param>
        /// <returns>True if enum contains specified flag. Otherwise false</returns>
        public static bool HasFlag(this Enum value, Enum checkedFlag)
        {
            ulong num = Convert.ToUInt64(checkedFlag);
            ulong num2 = Convert.ToUInt64(value);
            return (num2 & num) == num;
        }
    }
}

在项目的某个地方,我们有一些Enum和一些Func

[Flags]
public enum MyEnum
{
   zero= 0,
   two = 2,
   three = 3,
   threetwo = two | three 
}

public void SomeFunc()
{
   var ThreeTwo = Myenum.threetwo;

   bool _true = ThreeTwo.HasFlag(Myenum.three);
   bool _false = ThreeTwo.HasFlag(Myenum.zero);
   System.Windows.MessageBox.Show(String.Format("_true is: {0} and _false is : {1}", _true, _false);
 }

public void СallerFunction()
{
   try
   {
      SomeFunc();
   }
   catch (Exception ex)
   {
      System.Windows.MessageBox.Show(String.Format("Oops! {0}"), ex.Message));
   }
}

在发布模式下构建后,所有的工作都很好,我们得到了这个:

  

“_ true is:true,_false is:false”

但是Dotfuscator在编写代码后,我们获得了以下内容:

  

“糟糕!MethodNotFoundException”

并且所有功能都设置为是

Dotfuscator版本:PreEmptive ver4.9.7000 WindowsPhoneEdition

扩展有什么问题?

P.S。对不起我的英文。

1 个答案:

答案 0 :(得分:1)

免责声明:我的经验是dotfuscator的桌面版,而不是手机版。

Dotfuscator可能决定用引用枚举的每个地方的等效常量值替换枚举定义,从而消除了对枚举类型的需要。

尝试使用Dotfuscator设置来免除枚举的混淆,或在枚举上使用以下属性:

[Obfuscation(Exclude=true, ApplyToMembers=true, StripAfterObfuscation=true, Feature="renaming"]
[Obfuscation(Exclude=false, ApplyToMembers=true, StripAfterObfuscation=true, Feature="conditionalinclude")]

...然后如果可行则尝试允许重命名,但不能仅使用第二个属性来删除。

在使用ILDASM进行模糊检查后,查看枚举类型是否仍然存在,以及dotfuscator是否按预期进行操作。