首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象库SkipType配置元素不适用于枚举

对象库SkipType配置元素不适用于枚举
EN

Stack Overflow用户
提问于 2015-01-14 11:06:15
回答 1查看 1K关注 0票数 3

Obfuscar SkipType配置元素似乎不适用于枚举。这是我的最小配置文件。

代码语言:javascript
复制
<?xml version="1.0"?>
<configuration>

  <startup><supportedRuntime version="v4.0" 
     sku=".NETFramework,Version=v4.0,Profile=Client"/>
  </startup>

  <Obfuscator>

    <Var name="InPath"  
value="\users\user\docs\vs2013\projects\wpfapp\wpfapp\bin\debug" />
    <Var name="OutPath" 
value="\users\user\docs\vs2013\projects\wpfapp\wpfapp\bin\debug" />

    <Module file="$(InPath)\wpfapp.exe" />

    <Var name="KeepPublicApi" value="true" />
    <Var name="HidePrivateApi" value="true" />

    <SkipType name="WpfApp.Category" skipFields="true" skipProperties="true" />

  </Obfuscator>

</configuration>

映射输出文件显示跳过不起作用,枚举类型Category被重命名。

代码语言:javascript
复制
Renamed Types:

[WpfApp]WpfApp.Category -> [WpfApp]A.a
{
    WpfApp.Category [WpfApp]WpfApp.Category WpfApp.Category::Low -> A
    WpfApp.Category [WpfApp]WpfApp.Category WpfApp.Category::High -> a

    System.Int32 [WpfApp]System.Int32 WpfApp.Category::value__ skipped:  special name
}

编辑:元素<SkipType name="WpfApp.Category" />会导致同样的问题。

编辑:元素<SkipType name="WpfApp.Category" skipFields="true" />会导致同样的问题。

编辑:元素<SkipField type="WpfApp.Category" name="*" />会导致同样的问题。

编辑:这对

<SkipField type="WpfApp.Category" name="Low" />

<SkipField type="WpfApp.Category" name="High" />也会导致同样的问题。

来文提交人:

代码语言:javascript
复制
namespace WpfApp
{
    public enum Category { Low, High }

    //[System.Reflection.Obfuscation]
    public partial class MainWindow : Window
    {
        private ViewModel ViewModel;

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this.ViewModel = new ViewModel();
        }

        private void MyButtonClick(object sender, RoutedEventArgs e)
        {
            this.ViewModel.Process(MyTextBox.Text);
        }
    }

    internal class ViewModel : WpfNotifier
    {
        private const float DefaultKilograms = 80.0f;

        private string _kilograms;
        public string Kilograms // WPF binds here
        {
            get { return this._kilograms; }
            set { this._kilograms = value; NotifyPropertyChanged(); }
        }
        private string _resultText;
        public string ResultText // WPF binds here
        {
            get { return this._resultText; }
            set { this._resultText = value; NotifyPropertyChanged(); }
        }

        internal void Process(string input)
        {
            float kilograms;
            if (Single.TryParse(input, out kilograms))
            {
                Category c = (kilograms > 100.0f) ? Category.High : Category.Low;
                this.ResultText = c.ToString();
            }
            else
            {
                this.Kilograms = ViewModel.DefaultKilograms.ToString();
            }
        }
    }

    public class WpfNotifier : INotifyPropertyChanged
    {
        [field: NonSerialized]
        public event PropertyChangedEventHandler PropertyChanged; // public for interface

        internal void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            else
                ; // it is harmless to fail to notify before the window has been loaded and rendered
        }
    }
}

这是个错误还是我的用法错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-17 05:05:28

你的用法是错误的。如果您检查文献资料,您将看到<SkipType>标记必须放置到<Module>标记中。否则,Obfuscar不知道该跳过规则在哪个模块/程序集中生效。所以你应该试试

代码语言:javascript
复制
<Module file="$(InPath)\wpfapp.exe">
    <SkipType name="WpfApp.Category" skipFields="true" skipProperties="true" />
</Module>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27941434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档