我在弄清楚如何从 TFS Build 为我的应用程序“签署 ClickOnce list ”时遇到问题。
我通过选中“签署 ClickOnce list ”复选框并从文件中选择我们的代码签名 key ,在 VS 2010 中配置了我的签名页面,如下面的屏幕截图所示:
现在,当我从 VS 2010 发布应用程序时, list 似乎已成功签名:
但是,当我尝试从 TFS Build 构建应用程序时,它似乎没有尝试对 list 进行签名。事实上,甚至没有错误消息表明某些事情失败了。
我试图设置 TFSBuild.proj 文件,以便我的构建服务器知道证书并且我希望签署我的 list ,但我不知道如何做到这一点。
我尝试了以下方法:
<CustomPropertiesForBuild>SignManifests=true;ManifestCertificateThumbprint=<thumbprint goes here></CustomPropertiesForBuild>
但这似乎没有任何区别。 (也不会产生错误)。
注:我对强命名我的程序集不感兴趣;只是 signing my code .
有谁知道如何做到这一点?有没有人从 TFS Build 成功部署过 ClickOnce 应用程序?
最佳答案
到目前为止,我能够通过 TFSBuild 对我的代码进行签名的唯一方法是启动命令行代码签名工具。这主要包括三个步骤:
<Target Name="SignOutput">
<PropertyGroup>
<WindowsSdkDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\@CurrentInstallFolder)</WindowsSdkDir>
<WindowsSdkDir Condition="'$(WindowsSdkDir)' != '' and !HasTrailingSlash('$(WindowsSdkDir)')">$(WindowsSdkDir)\</WindowsSdkDir>
<SignToolPath>$(WindowsSdkDir)bin\signtool.exe</SignToolPath>
<Hash>...</Hash>
<TsUrl>http://timestamp.verisign.com/scripts/timstamp.dll</TsUrl>
</PropertyGroup>
<ItemGroup>
<SignableFiles Include="$(TargetDir)\Setup.msi" />
<SignableFiles Include="$(TargetDir)\Data.cab" />
</ItemGroup>
<ResolveKeySource CertificateThumbprint="$(Hash)">
<Output TaskParameter="ResolvedThumbprint" PropertyName="LocatedThumbprint"/>
</ResolveKeySource>
<Exec Condition="'$(LocatedThumbprint)' != '' and Exists('$(SignToolPath)')" ContinueOnError="true" Command="'$(SignToolPath)' sign /q /sha1 $(LocatedThumbprint) /t $(TsUrl) '%(SignableFiles.Identity)'" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="SignOutput" Condition="'$(ConfigurationName)' == 'Release'" />
</Target>
此方法也适用于开发人员机器,假设他们安装了适当的 SDK 工具。如果他们不这样做,它将跳过签名步骤,这对我们来说效果很好。
关于visual-studio-2010 - 通过 TFS Build 2008 签署 ClickOnce list ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059797/