关于dotfuscator和带空格的路径,我遇到了一个非常烦人的问题。我有一个.bat文件,它通过构建后事件调用,语法如下:
call "$(SolutionDir)..Builddotf.bat" $(SolutionDir) $(ConfigurationName) $(TargetPath) $(TargetDir).
.bat文件如下所示:
SET DOTFPATH="%1..ToolsDotfuscatorProEdition4.13.0dotfuscator.exe"
SET DEBUG=%2
SET TARGETFILE=%3
SET OUTPUT=%4
if "%DEBUG%" == "Release" (
%DOTFPATH% /q /in:"%TARGETFILE%" /out:"%OUTPUT%"
) ELSE (
echo DOTFUSCATOR: Skipped due to debugmode
)
.bat文件接收参数并生成如下命令:
"C:somepathtodotfuscator.exe" /q /in:C:apathtoprojectMydll.dll /out:C:apathtoproject
.bat文件在本地运行良好。但在构建服务器上,解决方案和项目路径都有空白,如下所示:
"C:somepathtodotfuscator.exe" /q /in:C:apathto projectMydll.dll /out:C:apathto project
这当然会搅乱争论。所以,我试着用这样的引号把路径括起来:
"C:somepathtodotfuscator.exe" /q /in:"C:apathto projectMydll.dll" /out:"C:apathto project"
这修复了.bat文件和参数解析,但dotfuscator本身现在失败得很惨!Dotfuscator现在抱怨"路径中的非法字符"。我该怎么解决这个问题?
如果路径包含空格,那么传递给bat文件的参数应该已经用引号保护了。因此,您可能正在创建/in:"c:\some path",但这不起作用。首先尝试删除bat文件中dotfuscator行上的引号。
或者,尝试切换到目录并返回,而不是尝试计算dotfuscator。您还需要将第三个参数从targetpath更改为targetfile
SET DOTFPATH="%1..ToolsDotfuscatorProEdition4.13.0dotfuscator.exe"
SET DEBUG=%2
SET TARGETFILE=%3
SET OUTPUT=%4
if "%DEBUG%" == "Release" (
pushd %OUTPUT%
%DOTFPATH% /q /in:%TARGETFILE% /out:.
popd
) ELSE (
echo DOTFUSCATOR: Skipped due to debugmode
)