【发布时间】: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 '<.ctor>b__5'在它被称为b__b(未混淆)的一侧,所以我认为这是转移的。 -
调用
new MyClass(myObject, o=>o.Id)的类是否标记为可序列化?MyClass将引用此类的实例(因为它包含编译器生成的方法),因此需要序列化该实例。 -
是的,两个类(
MyClass和调用者)是Serializable -
您是否尝试过将此编译器生成的方法排除在重命名之外?
标签: c# .net delegates func dotfuscator