3

Visual Studio 2010でsigntool.exeを使用して、証明書を使用してプロジェクトに自動署名しようとしています。単純化されたビルド後のスクリプトは次のとおりです。

if $(ConfigurationName)== Debug(call "$(VS100COMNTOOLS)VCVarsQueryRegistry.bat" call "$(WindowsSdkDir)bin / signtool.exe" sign / f "$(ProjectDir)my.pfx" / p mypass /ttimstamp。 dll "$(TargetPath)")

Debugテスト用です。私は模倣しようとしています-いくつかの余分な変数を追加して後でそれを使用するVisual Studio command prompt実行。私が必要なものです。$(VS100COMNTOOLS)VCVarsQueryRegistry.bat$(WindowsSdkDir)

batそのスクリプトは単純なファイルでは完全に機能しますが、VisualStudioでは機能しません。出力は次のとおりです。

「C:\ ProgramFiles(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Tools\VCVarsQueryRegistry.bat」を呼び出します。「bin/signtool.exe」を呼び出します。

VCVarsQueryRegistry.batで作成された$(WindowsSdkDir)を認識しないことに注意してください。

batでvarを宣言し、後でビルド後に使用することは可能ですか、それとも別のアプローチを使用する必要がありますか?

4

1 に答える 1

3

少し注意が必要です。

  • %var%まず、cmd変数の場合、msbuildのような構文ではなく構文を使用する必要があります$(var)
  • 次に、バッチからのSETステートメントcallが適用されます。ただし、 bodyはその変数を事前に計算するため、1つのbodyだけでなく、複数の行ifが必要です。これは、そのような動作とそれを回避するための他の方法の良い説明です.batファイルの奇妙なスコープの問題ifif

したがって、これは機能するはずです。

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)"
于 2013-03-26T16:09:39.517 に答える