我已经使用DotfuscatorCLI和Visual Studio 2015 Update 3 Post Build事件命令混淆了.Net DLL。它似乎已成功混淆,因为该命令之后没有出现错误。
这是命令:
dotfuscatorcli.exe/q /p=SourceDirectory="$(TargetDir(\",SourceFile=$(TargetFileNa me( "$(ProjectDir(Dotfuscator.xml">
这是混淆器.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v1.1.dtd">
<dotfuscator version="1.1">
<propertylist>
<property name="SourceDirectory" value="This Path Will Be Replaced By Visual Studio" />
<property name="SourceFile" value="This Filename Will Be Replaced By Visual Studio" />
</propertylist>
<trigger>
<filelist>
<file dir="${SourceDirectory}" name="${SourceFile}" />
</filelist>
</trigger>
<output>
<file dir="${SourceDirectory}Dotfuscator" />
</output>
</dotfuscator>
现在,当我在另一个项目中引用该 DLL 并尝试访问其公共成员时;我无法再访问它们。就好像它们在该 DLL 中没有定义/公共,并且在智能感知中也不可用。
如果我在对象浏览器中查看该 DLL,它会显示带有一些奇怪名称的类,例如 h、I、m、n 等。
为了使用该 DLL,我在这里错过了什么吗?
任何回应,提示或解决方案将不胜感激。
听起来您可能已经禁用了该程序集的库模式。尝试重新启用它,这将告诉 Dotfuscator 自动从重命名中排除公共类型和成员。
在@Nathan的帮助下,我能够解决我遇到的问题。这是更新的混淆器.xml文件中的内容。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v2.3.dtd">
<dotfuscator version="2.3">
<propertylist>
<property name="SourceDirectory" value="This Path Will Be Replaced By Visual Studio" />
<property name="SourceFile" value="This Filename Will Be Replaced By Visual Studio" />
</propertylist>
<input>
<asmlist>
<inputassembly>
<option>library</option>
<file dir="${SourceDirectory}" name="${SourceFile}" />
</inputassembly>
</asmlist>
</input>
<output>
<file dir="${SourceDirectory}Dotfuscator" />
</output>
</dotfuscator>
我知道如果我使用 dotfuscator UI,它会自动启用库模式,但我故意选择 CLI 方法。我想自动化并为一个项目中引用的 35+ DLL 提供通用解决方案。所以现在使用这种方法,我希望这不仅可以自动化我的混淆过程,还可以加快速度,因为它是一种构建后事件命令方法。简而言之,我需要做的就是按"构建解决方案"按钮,然后就完成了。
希望这会帮助其他人。如果有任何歧义或疑虑,或者如果您有任何其他建议,请告诉我。