.NET Core 5.0项目使用Obfuscar代码混淆报错码123如何解决?
报错原因排查
- 生成后事件使用了全角双引号,Windows命令行无法识别全角符号,直接触发路径语法错误。你代码中
“$(Obfuscar)”所用的引号为中文全角格式,不符合命令行语法要求。 - 未指定正确的工作目录和配置文件路径,生成后事件默认工作目录为项目根目录,若
obfuscar.xml存放位置不匹配、或者和配置中InPath的路径逻辑冲突,会导致文件找不到。 - 配置中指定的输出目录
$(InPath)\Obfuscar若不存在,Obfuscar运行时会直接报错。 - 日志中显示的Nuget路径
C:\Users\VVSCPP.nuget\packages\obfuscar\2.2.31\build..\tools\Obfuscar.Console.exe存在路径拼接错误(build后缺少反斜杠),本质是全角引号导致MSBuild解析变量异常。
解决方案
- 首先将生成后事件的全角引号替换为半角引号,同时补充目录创建、工作目录切换逻辑,修改后的生成后事件代码如下:
if $(ConfigurationName) == Release ( rem 创建混淆输出目录,避免目录不存在报错 if not exist "$(TargetDir)Obfuscar" md "$(TargetDir)Obfuscar" rem 切换工作目录到编译输出路径,和obfuscar配置中的InPath对应 cd "$(TargetDir)" rem 执行混淆命令,明确指定obfuscar.xml的路径(下方为配置文件存放在项目根目录的写法) "$(Obfuscar)" "$(ProjectDir)obfuscar.xml" )
- 确认
obfuscar.xml的存放位置,如果你把配置文件放在编译输出目录,将上述命令中的$(ProjectDir)obfuscar.xml替换为$(TargetDir)obfuscar.xml即可。 - 若修改后仍出现路径解析问题,可以直接替换
$(Obfuscar)变量为Obfuscar.Console.exe的绝对路径测试,确认变量解析是否正常。 - 路径问题解决后如果混淆过程报错,可以临时关闭
UseUnicodeNames配置排查是否是字符编码导致的兼容性问题。
内容的提问来源于stack exchange,提问作者s k
相关产品推荐
相关产品推荐

