如何在安装了 Visual Studio 2017 的情况下获取 signtool.exe 的路径

Act*_*inz 5 msbuild signtool visual-studio-2017

我已经进行了基于 Visual Studio 2012 的项目。通过以下方式找到了 signtool.exe 的路径:

<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>
Run Code Online (Sandbox Code Playgroud)

现在我想将项目移植到 Visual Studio 2017。安装后,由于缺少 Windows SDK 8,以这种方式获取路径不再有效。

我已经安装了 Click Once 组件和 Windows 10 SDK。因此 signtool.exe 可用。

有人能告诉我如何使用 Visual Studio 2017 找到路径吗?

Leo*_*SFT 4

有人可以告诉我如何找到 Visual Studio 2017 的路径吗?

SignToolPath您可以根据配置从注册表中查找并设置变量:

<PropertyGroup>
  <WindowsKitsRoot>$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots', 'KitsRoot10', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot>
  <WindowsKitsRoot Condition="'$(WindowsKitsRoot)' == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots', 'KitsRoot81', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot>
  <WindowsKitsRoot Condition="'$(WindowsKitsRoot)' == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots', 'KitsRoot', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot>
  <SignToolPath Condition=" '$(SignToolPath)' == '' And '$(Platform)' == 'AnyCPU' ">$(WindowsKitsRoot)bin\x86\</SignToolPath>
  <SignToolPath Condition="'$(SignToolPath)' == ''">$(WindowsKitsRoot)bin\$(Platform)\</SignToolPath>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我们可以将此属性设置到我们的项目文件或.target文件中,然后将其导入到项目文件中。

或者,您可以将环境变量设置为SignToolPath全局系统路径(通过控制面板->系统->高级系统设置->环境变量):

C:\Program Files (x86)\Windows Kits\10\bin\x86
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。