我正在开发一个 C# WPF 项目,我需要一些混淆。我发现了 Obfuscar,它看起来非常有前途,使用 nuget 和构建后事件似乎是一个可靠的解决方案。因此,我安装了 nuget 包,并添加并调整了 obfuscar.xml 文件,使其能够正常工作。
但是,构建后命令引用了宏
$(Obfuscar)
,无法识别。现在,当我构建项目时,出现以下构建错误:
命令“obfuscar.xml”退出,代码为 9009。
请注意第一个引号后面的空格:
$(Obfuscar)
显然无法以某种方式解决。
我尝试了文档和其他网站上描述的所有步骤,包括将宏放在引号内,但我就是无法让它工作。
--编辑--
我做了什么: - 安装了 Obfuscar nuget - 添加了具有基本配置的 obfuscar.xml 文件 - 添加了构建后事件 - 尝试构建
我在构建后事件方面尝试过的:
$(Obfuscar) obfuscar.xml
命令“obfuscar.xml”退出,代码为 9009。
"$(Obfuscar)" obfuscar.xml
命令“”“obfuscar.xml”退出,代码为 9009。
我尝试构建并运行示例项目,效果非常好。我已将示例项目中的构建后事件(不是 xml 文件)复制粘贴到我的项目中,但这只是给出了相同的结果。
我也不明白的是 Visual Studio 如何知道
$(Obfuscar)
的含义或如何将其解析为 Obfuscar 可执行文件的路径。我是否需要在某处进行某种配置,或者是否需要某种特殊的黑魔法才能起作用?
--编辑2--
我已经现在可以通过将 Obfuscar 可执行文件从 nuget 文件夹复制到我的 PATH 中的一个文件夹(现在是 C:\Windows)作为“obfuscar.exe”,然后简单地使用构建后命令
obfuscar obfuscar.xml
。我说有点,因为实际上使用 nuget 而不是复制的可执行文件是现在我没有自动更新。现在,当新版本出现时,我必须手动复制/粘贴它。我想我现在必须将其添加到自述文件中,直到出现更好的解决方案。
就我而言,问题是这段代码(在项目文件中):
<PropertyGroup>
<PostBuildEvent>"$(Obfuscar)" obfuscar.xml</PostBuildEvent>
</PropertyGroup>
在这行之前(我的是VB.NET项目):
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
我更改了项目中两个 XML 代码片段的顺序,现在工作正常了。
在我的例子中,$(Obfuscar)参数解析为
C:\Users\Me\Documents\MyProject\packages\Obfuscar.2.2.39 uild.. ools\Obfuscar.Console.exe
所以某个地方的配置有错误。我只是在构建事件中硬编码了 Obfuscar.Console.exe 的路径(但我确信有更复杂的解决方案)。