0

私たちのアプリケーションには、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 は true で、_false は false です」

しかし、Dotfuscator がコードに取り組んだ後、次の結果が得られました。

「おっと! MethodNotFoundException」

そして、すべての機能がはいに設定されています

Dotfuscator のバージョン: PreEmptive ver4.9.7000 WindowsPhoneEdition

拡張機能の何が問題になっていますか?

PS私の英語でごめんなさい。

4

1 に答える 1

1

免責事項: 私の経験は dotfuscator のデスクトップ バージョンであり、電話バージョンではありません。

Dotfuscator は、列挙型が参照されるすべての場所で、列挙型の定義を同等の定数値に置き換えることを決定している可能性があります。これにより、列挙型の必要性がなくなります。

Dotfuscator 設定を使用して列挙型を難読化から除外するか、列挙型で次の属性を使用してみてください。

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

...そして、それが機能する場合は、2 番目の属性だけを使用して、名前の変更を許可し、削除は許可しないようにしてください。

難読化後、ILDASMを使用して、列挙型がまだ存在するかどうか、および dotfuscator が期待どおりに動作しているかどうかを確認します。

于 2012-07-06T12:19:21.607 に答える