0

難読化から(名前空間によって)除外された(転送する必要があるため)クラスには、この種のコンストラクターを持つコンストラクターがあります

public MyClass<T> (T currentObject, Func<T, int> extrator) : where T : XYZ{}

コンストラクターを呼び出すときは、次のようにします

new MyClass(myObject, o=>o.Id)

コンパイル後、逆コンパイル時に静的メソッドが追加されていることがわかりました。

[CompilerGenerated]
private static int <.ctor>b__b(CurrentObjectClass e)
{
    return e.Id;
}

これはメソッドであり、名前空間が除外されているため、このクラスは変更されないことを期待していました。しかし、dotfuscator が起動した後、次のようになりました。

[CompilerGenerated]
private static int <.ctor>b__5(CurrentObjectClass e)
{
//Obfuscated code
}

クライアントとサーバーの間でこのクラスを使用するため、サーバーはリリース (難読化) で実行され、クライアントはデバッグでのみ実行されることがよくあります。 .Net リモーティング)。

この動作を防ぐ方法はありますか?

4

1 に答える 1

0

私は問題を見つけました:

難読化は実際には何の関係もありません。クライアントとサーバーが同じビルドで生成されなかったために問題が発生しました。つまり、コンパイラはコンパイルごとに 2 つの異なる名前を生成していました。

デリゲート型の使用を避けたところ、難読化しても機能するようになりました。

ご協力ありがとうございました。

于 2014-04-15T13:58:41.490 に答える