summaryrefslogtreecommitdiff
path: root/csharp/msbuild/ice.sign.targets
blob: 1ce69cf0046539f54f3c1b311c320cbeda51c9a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TimeStampServer>http://timestamp.digicert.com</TimeStampServer>
    <SignCommandSHA1>signtool sign /f "$(SIGN_CERTIFICATE)" /p $(SIGN_PASSWORD) /t $(TimeStampServer)</SignCommandSHA1>
    <SignCommandSHA256>signtool sign /f "$(SIGN_CERTIFICATE)" /p $(SIGN_PASSWORD) /tr $(TimeStampServer) /td sha256 /fd sha256 /as</SignCommandSHA256>
    <SignTarget>$(IntermediateOutputPath)$(TargetName)$(TargetExt)</SignTarget>
  </PropertyGroup>

  <Target Name="SignPackage" AfterTargets="AfterCompile"
          Condition="Exists('$(SIGN_CERTIFICATE)') and (!Exists('$(IntermediateOutputPath)sign.log') or $([System.IO.File]::GetLastWriteTime('$(SignTarget)').Ticks) &gt; $([System.IO.File]::GetLastWriteTime('$(IntermediateOutputPath)sign.log').Ticks))">
    <Message Text="Signing $(SignTarget)" />

    <Exec Command="$(SignCommandSHA1) $(SignTarget)" EchoOff="yes"/>
    <Exec Command="$(SignCommandSHA256) $(SignTarget)" EchoOff="yes"
          Condition="'$(DefaultPlatformToolset)' != 'v100'"/>

    <WriteLinesToFile File                = "$(IntermediateOutputPath)sign.log"
                      Encoding            = "Unicode"
                      Overwrite           = "true"
                      Lines               = "Signing $(SignTarget)"/>
  </Target>

  <Target Name="SignPackageClean" AfterTargets="Clean">
     <Delete Files="$(IntermediateOutputPath)sign.log" />
  </Target>

  <PropertyGroup Condition="'$(PUBLIC_KEYFILE)' != '' Or '$(KEYFILE)' != ''">
    <SignAssembly>true</SignAssembly>
    <!-- If PUBLIC_KEYFILE is set we use dealy sign to sign the assembly -->
    <DelaySign>true</DelaySign>
    <AssemblyOriginatorKeyFile Condition="'$(PUBLIC_KEYFILE)' != ''">$(PUBLIC_KEYFILE)</AssemblyOriginatorKeyFile>

    <!-- If PUBLIC_KEYFILE is not set sign the assembly using KEYFILE -->
    <DelaySign Condition="'$(PUBLIC_KEYFILE)' == ''">false</DelaySign>
    <AssemblyOriginatorKeyFile Condition="'$(PUBLIC_KEYFILE)' == ''">$(KEYFILE)</AssemblyOriginatorKeyFile>
  </PropertyGroup>

  <!-- If both KEYFILE and PUBLIC_KEYFILE are set we re-sign the assembly using KEYFILE after it has been build -->
  <Target Name="StrongNameSignPackage" BeforeTargets="SignPackage"
          Condition="'$(IceBuilderCsharpProps)' != '' And '$(KEYFILE)' != '' And '$(PUBLIC_KEYFILE)' != '' and (!Exists('$(IntermediateOutputPath)strongname.sign.log') or $([System.IO.File]::GetLastWriteTime('$(SignTarget)').Ticks) &gt; $([System.IO.File]::GetLastWriteTime('$(IntermediateOutputPath)strongname.sign.log').Ticks))">
    <Exec Command="sn -Ra $(SignTarget) $(KEYFILE)"/>
    <WriteLinesToFile File                = "$(IntermediateOutputPath)strongname.sign.log"
                      Encoding            = "Unicode"
                      Overwrite           = "true"
                      Lines               = "Signing $(SignTarget)"/>
  </Target>
</Project>