【问题标题】:Dotfuscator + delegate (Func<> )Dotfuscator + 委托 (Func<> )
【发布时间】:2014-04-08 13:00:09
【问题描述】:

在一个被混淆(通过命名空间)排除的类中(因为它必须被转移),我有一个具有这种构造函数的构造函数

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 远程处理)。

有没有办法防止这种行为?

【问题讨论】:

  • 混淆对远程处理有何影响?当您进行远程调用时,被序列化和发送的是类中的数据,而不是类本身。
  • 我有一个SerializationException: Cannot get the member '&lt;.ctor&gt;b__5' 在它被称为b__b(未混淆)的一侧,所以我认为这是转移的。
  • 调用new MyClass(myObject, o=&gt;o.Id)的类是否标记为可序列化? MyClass 将引用此类的实例(因为它包含编译器生成的方法),因此需要序列化该实例。
  • 是的,两个类(MyClass和调用者)是Serializable
  • 您是否尝试过将此编译器生成的方法排除在重命名之外?

标签: c# .net delegates func dotfuscator


【解决方案1】:

我发现了问题:

混淆实际上无关,问题是因为客户端和服务器不是在同一个构建中生成的,这意味着编译器在每次编译时都生成了两个不同的名称。

我避免使用委托类型,现在它可以工作了,即使是混淆了。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2011-05-27
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2015-07-08
    相关资源
    最近更新 更多