C# 使Obfuscar避免重命名枚举类型
在使用Obfuscar时,我希望防止对枚举类型进行模糊处理,因为我需要原始的枚举值名称。我对枚举值调用C# 使Obfuscar避免重命名枚举类型,c#,enums,obfuscar,C#,Enums,Obfuscar,在使用Obfuscar时,我希望防止对枚举类型进行模糊处理,因为我需要原始的枚举值名称。我对枚举值调用ToString(),因为它们对用户很有用。我在通常的配置中遇到了困难,除了那些出现在配置文件中带有元素的类型之外,所有类型都被模糊化了。我使用的是可能更为悲观的方法,即使用,它只会混淆用注释标记的内容。下面是相当小的配置文件 <?xml version="1.0"?> <configuration> <startup><s
ToString()
,因为它们对用户很有用。我在通常的配置中遇到了困难,除了那些出现在配置文件中带有
元素的类型之外,所有类型都被模糊化了。我使用的是可能更为悲观的方法,即使用
,它只会混淆用注释标记的内容。下面是相当小的配置文件
<?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\documents\visual studio 2013\projects\wpfapp\wpfapp\bin\debug" />
<Var name="OutPath"
value="\users\user\documents\visual studio 2013\projects\wpfapp\wpfapp\bin\debug" />
<Module file="$(InPath)\wpfapp.exe" />
<Var name="KeepPublicApi" value="true" />
<Var name="HidePrivateApi" value="true" />
<Var name="MarkedOnly" value="true" />
</Obfuscator>
</configuration>
正如您所见,只有一种类型用[System.Reflection.Obfuscation]
注释,但输出映射显示枚举已重命名。枚举类型称为类别
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
}
我的用法是错误的还是一个错误?在“仅标记”选项周围发现了一个错误,在混淆字段等时无法检查该错误。我刚把它修好在总店
请注意,此更改后,“MarkedOnly”选项仅限于其他选项。如果元素(class/enum/method/field等)没有附加
模糊处理
属性,它将保持不变。“KeepPublicApi”和“HidePrivateApi”等设置将被忽略。枚举值存储为编译器生成的结构的字段。我怀疑您需要使用skipFields
atribute
排除它们。看起来
被
覆盖,默认情况下标记所有私有/内部成员和类。虽然我现在还不明白为什么它会混淆公共类别枚举,但这可能是因为它不是由公共方法公开的,因此被认为是私有的……源代码中的测试提供了许多跳过枚举字段的方法:
是一种(它忘记了枚举类型的名称,但保留了字段)。请参阅source drop中的SkipEnumtests:我尝试了4种不同的跳过,到目前为止,它没有跳过。他们在这个链接上
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
}