我正在尝试使用Visual Studio 2010中的signtool.exe自动使用证书对项目进行签名。这是我的简化后构建脚本:
如果$(ConfigurationName)== Debug( 调用“$(VS100COMNTOOLS)VCVarsQueryRegistry.bat” 调用“$(WindowsSdkDir)bin / signtool.exe”sign / f“$(ProjectDir)my.pfx”/ p mypass / t timstamp.dll“$(TargetPath)” )
Debug
用于测试目的。我正在尝试模仿Visual Studio command prompt
- 执行$(VS100COMNTOOLS)VCVarsQueryRegistry.bat
,这会添加一些额外的变量,然后再使用它。我需要$(WindowsSdkDir)
。
虽然该脚本在简单的bat
文件中完美运行,但它拒绝在Visual Studio中工作。输出是:
调用“C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ VCVarsQueryRegistry.bat” 调用“bin / signtool.exe”标志......
请注意,它无法识别在VCVarsQueryRegistry.bat中创建的$(WindowsSdkDir)。
是否可以在bat中声明var并在后期构建中使用它,或者我应该使用其他方法?
答案 0 :(得分:3)
这有点棘手:
%var%
语法而不是类似msbuild的$(var)
call
批次的SET语句确实适用..但if
正文预先计算其变量,因此您需要多个if
行,而不只需要一个if
正文。以下是对此类行为及其他避免此类行为的方法的良好解释Weird scope issue in .bat file 所以,这个应该有效:
if $(ConfigurationName) == Debug call "%VS100COMNTOOLS%VCVarsQueryRegistry.bat"
if $(ConfigurationName) == Debug call "%WindowsSdkDir%bin\signtool.exe" sign /f "$(ProjectDir)my.pfx" /p mypass /t timstamp.dll "$(TargetPath)"