msbuild - 使用 Visual Studio 2012 时 SignTool.exe 或 "Windows Kits"目录的路径

标签 msbuild visual-studio-2012 signtool

使用 Visual Studio 2012 时如何获取 SignTool.exe 的路径?

在 Visual Studio 2010 中,您可以使用

<Exec Command="&quot;$(FrameworkSDKDir)bin\signtool.exe&quot; sign /p ... />

其中 $(FrameworkSDKDir)

"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\"

但在 Visual Studio 2012 中,$(FrameworkSDKDir)

 "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\"

SignTool 位于

 "c:\Program Files (x86)\Windows Kits\8.0\bin\x64\"

除了硬编码之外,还有其他方法可以获取此目录的路径吗(我尝试过 FrameworkSDKDirWindowsSDKDir,但两者都指向 v8.0A 目录)。

(我知道 SignFile MSBuild 任务,但我无法使用它,因为它不接受证书密码。)

最佳答案

我刚刚遇到了同样的问题。从 Visual Studio 2012 命令提示符运行构建可行,但在 IDE 中失败。寻找详细或诊断日志使我找到了What is the default location for MSBuild logs? ,这告诉我 Visual Studio 无法提供我真正需要的诊断信息。

这就是我最终修复它的方法。

打开普通命令提示符(不是 Visual Studio 命令提示符),然后通过完全限定 MSBuild 的路径 (%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe) 来运行 msbuild。这最终给了我与 Visual Studio 2012 中收到的相同的错误消息(错误代码 9009)。

然后,通过附加/v:diag 开关,使用“诊断”日志记录(显示所有属性和项值)运行相同的构建。

从这个输出中,我了解到它确实有一些新属性,我可以使用它们来获取signtool.exe 的位置(摘录如下):

windir = C:\Windows
windows_tracing_flags = 3
windows_tracing_logfile = C:\BVTBin\Tests\installpackage\csilogfile.log
WindowsSDK80Path = C:\Program Files (x86)\Windows Kits\8.0\
WIX = C:\Program Files (x86)\WiX Toolset v3.7\

因此,我解决此问题的方法是将以下内容添加到我的 *.targets 文件中:

<SignToolPath Condition=" Exists('$(WindowsSDK80Path)bin\x86\signtool.exe') and '$(SignToolPath)'=='' and '$(PROCESSOR_ARCHITECTURE)'=='x86' ">$(WindowsSDK80Path)bin\x86\signtool.exe</SignToolPath>
<SignToolPath Condition=" Exists('$(WindowsSDK80Path)bin\x64\signtool.exe') and '$(SignToolPath)'=='' and '$(PROCESSOR_ARCHITECTURE)'=='AMD64' ">$(WindowsSDK80Path)bin\x64\signtool.exe</SignToolPath>

希望这对您也有帮助。我在序言中介绍了我是如何达到这一点的,因为还有其他可用的属性可能更适合您的目的。

关于msbuild - 使用 Visual Studio 2012 时 SignTool.exe 或 "Windows Kits"目录的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14082020/

相关文章:

c++ - 是否可以在 Visual Studio 2012 中配置性能 session 文件 (VSP) 的位置?

python - 可以使用 Python 在 Windows 证书存储中安装 exe 文件 pfx 文件

.net - MSBuild - 如何从预先编写的命令行命令构建 .NET 解决方案文件(在 XML 任务脚本中)

visual-c++ - 为 Visual Studio 2012 安装 OpenCV

c# - 类型或命名空间 'MSBuild' 在命名空间 'Microsoft.CodeAnalysis' 中不存在,尽管能够导航到定义

c# - 通过数据网格将数据保存到数据库

windows - 如何在 Windows 7 上使用 SHA256 设置签名工具?

clickonce - SignTool 验证 .application 和 .manifest 文件的等效项?

.net - 仅当项目实际构建时才运行 MSBuild 目标

visual-studio-2010 - MSBuild - 如何使用 Visual Studio 创建/编辑构建脚本?