2013-01-11 66 views
2

我在某些情况下应该隐藏的xaml文件中有一个按钮。C#混淆和XAML

这就是:

<Button Visibility="{Binding Path=ShowMyButton}"/> 

的绑定工作,完善直到它混淆我的代码。

在AssemblyInfo.cs中添加以下组件注释:

[assembly: ObfuscateAssemblyAttribute(false, StripAfterObfuscation = false)] 

顺便说一句,我用Eazfuscator.NET

混淆代码按钮总是可见后,即绑定呢不工作了。

我添加了以下注释到ShowMyButton属性:

[ObfuscationAttribute(Exclude=true)] 
public bool ShowMyButton 
{ 
    get 
    { 
     return _showMe; 
    } 
    set 
    { 
     _showMe= value; 
     OnPropertyChanged("ShowMyButton"); 
    } 
} 

这个特殊的工作正常,但我有3个问题:

  1. 为什么XAML弄糊涂了,当谈到混淆。我可以告诉混淆器不要混淆引用xaml文件中的绑定的方法吗?
  2. 根据msdn ObfuscateAssemblyAttribute仅区分公有方法和私有方法。手动排除在xaml文件中引用绑定的所有方法(我的应用程序中有几十个)会是非常令人沮丧的。有没有自动选项?

  3. 有没有办法告诉obfucator在应用程序中只对特定的方法进行混淆,即,请不要默认混淆任何东西,直到我告诉你这样做。

+0

我个人认为,使用dotfuscator;它工作得很好 – Ramie

回答

2

这是在最近版本的Eazfuscator.NET的已知问题和it was fixed

+0

谢谢,它解决了这个问题。 –

1

如果混淆混淆了ShowMyButton属性,但不会在编译的XAML将其重命名,绑定不有一个目标,因为它仍然针对ShowMyButton,而不是模糊的版本。

2

这里的问题与XAML无关。问题在于你的实现INotifyPropertyChanged;强调为什么stringly-typed是一个坏主意。混淆器被重新命名ShowMyButton无处不在它被用来作为一种方法,但它不会重命名该字符串的发生:

OnPropertyChanged("ShowMyButton"); 

混淆后,被解雇的更新事件会说属性“ShowMyButton”有已更新,但实际属性已重命名为混淆值,因此任何依赖此接口的代码(包括XAML的数据绑定)都不会正确更新,始终显示布尔值true的默认值。

更重构友好的实现使用表达式而不是字符串类型,所以出错的行可以改写到

OnPropertyChanged(() => this.ShowMyButton); 

One possible implementation of this pattern.

+0

这个改变在非模糊代码上正常工作。当涉及到混淆代码时,它不起作用。 –

0

尝试Babel for。并检查出它在http://babelfor.net/ 它对XAML有很好的混淆。 另请注意,Eazfuscator很容易被 de4dot和ILSpy混合使用。其变量和值的重命名非常简单,其中ILSpy可以显示所有内容。

巴贝尔另一方面,添加循环,迭代,开关哪些 可以混淆饼干,并使任何deobfuscated代码不可读 和无法追踪。它也可以加密字符串和整个方法 使它们不可读。