我有一个带有ViewModel类的UserControl作为DataContext:

XAML

<UserControl ... >
    <TextBox Text="{Binding ViewModelProperty}"/>
</UserControl>


代码背后:

namespace DotfuscatorTest.UserControl.View
{
   using ViewModel;
   public partial class UserControlView
   {
      public UserControlView()
      {
         InitializeComponent();
         DataContext = new UserControlViewModel();
      }
   }
}


ViewModel类:

namespace DotfuscatorTest.UserControl.ViewModel
{
   internal class UserControlViewModel
   {
      private string viewModelProperty = "hello world";

      public string ViewModelProperty
      {
        get { return viewModelProperty; }
        set { viewModelProperty = value; }
      }
   }
}


此示例运行良好(数据绑定正常工作)。但是现在,当我用Dotfuscator(版本4.9.7750)混淆该程序集时,绑定不起作用。如果我将UserControlViewModel类设为public,则混淆后应用程序也可以正常运行。

据我了解,Dotfuscator不会在公共属性时更改其名称,但会在其私有或内部类时更改它。

我现在的问题是,你如何处理这个问题。我认为常见的是内部类具有在DataBindings中使用的属性,不是吗?
还是有一种方法可以配置Dotfuscator?

提前致谢,
rhe1980

最佳答案

默认情况下,Dotfuscator执行属性名称混淆(重命名),这会固有地破坏XAML绑定。它将通过重命名XAML中的绑定目标来尝试纠正此问题,但这种情况并不总是成功的。无需更改代码即可更正此错误的最简单方法是在Dotfuscator中添加重命名排除项。您应该可以在“重命名”选项卡中查找,并且可以将相关的ViewModel排除在重命名之外。

关于c# - 混淆包含内部类属性的DataBindings的Assembly,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12005151/

10-12 14:11