Add sign.builds projects to facilitate real signing in official builds.
authorJoel Hendrix <jhendrix@microsoft.com>
Thu, 19 May 2016 18:33:21 +0000 (11:33 -0700)
committerJoel Hendrix <jhendrix@microsoft.com>
Thu, 19 May 2016 18:33:21 +0000 (11:33 -0700)
New build project, sign.builds, is to be built post building of binaries
so that they can be real-signed in the official build.
Updated some project files with the correct strong name certificate.

src/mscorlib/System.Private.CoreLib.csproj
src/mscorlib/facade/mscorlib.csproj
src/mscorlib/mscorlib.csproj
src/mscorlib/ref/mscorlib.csproj
src/sign.builds [new file with mode: 0644]

index 2f246e7..f44944e 100644 (file)
 
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.Targets" />
 
+  <PropertyGroup>
+    <StrongNameSig>Silverlight</StrongNameSig>
+  </PropertyGroup>
+
   <!-- Import signing tools -->
   <Import Condition="Exists('$(ToolsDir)\sign.targets')" Project="$(ToolsDir)\sign.targets" />
 
index 11dde3e..9806ee0 100644 (file)
   <ItemGroup>
     <None Include="project.json" />
   </ItemGroup>
+
+  <PropertyGroup>
+    <StrongNameSig>Silverlight</StrongNameSig>
+  </PropertyGroup>
+
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
 
- <PropertyGroup>
 <PropertyGroup>
     <!-- Overwrite the key that we are going to use for signing -->
     <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)..\Tools\Signing\mscorlib.snk</AssemblyOriginatorKeyFile>
   </PropertyGroup>
+
+  <!-- the signing marker file is incorrectly named mscorlib.dll.requires_signing -->
+  <Target Name="RenameSigningMarker" AfterTargets="WriteSigningRequired" Condition="Exists('$(TargetPath).requires_signing')">
+    <Move SourceFiles="$(TargetPath).requires_signing" DestinationFiles="$(OutputPath)\System.Private.CoreLib.dll.requires_signing" />
+  </Target>
+
 </Project>
index 5a6f369..9f5615d 100644 (file)
 
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.Targets" />
 
+  <PropertyGroup>
+    <StrongNameSig>Silverlight</StrongNameSig>
+  </PropertyGroup>
+
   <!-- Import signing tools -->
   <Import Condition="Exists('$(ToolsDir)\sign.targets')" Project="$(ToolsDir)\sign.targets" />
 
index e80a71b..9827fe7 100644 (file)
 
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.Targets" />
 
+  <PropertyGroup>
+    <StrongNameSig>Silverlight</StrongNameSig>
+  </PropertyGroup>
+
   <!-- Import signing tools -->
   <Import Condition="Exists('$(ToolsDir)\sign.targets')" Project="$(ToolsDir)\sign.targets" />
 
diff --git a/src/sign.builds b/src/sign.builds
new file mode 100644 (file)
index 0000000..114880a
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="SignFiles" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <!-- must set the default before importing targets -->
+  <PropertyGroup>
+    <SignType Condition="'$(SignType)' == ''">test</SignType>
+    <StrongNameSig>Silverlight</StrongNameSig>
+  </PropertyGroup>
+
+  <Import Project="..\dir.props"/>
+  <Import Project="..\dir.targets" />
+
+  <!-- OutDir is used by the MicroBuild signing target -->
+  <PropertyGroup>
+    <OutDir>$(BinDir)</OutDir>
+  </PropertyGroup>
+
+  <UsingTask AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" TaskName="ReadSigningRequired" />
+
+  <!-- apply the default signing certificates (defined in sign.targets) -->
+  <ItemDefinitionGroup>
+    <FilesToSign>
+      <Authenticode>$(AuthenticodeSig)</Authenticode>
+      <StrongName>$(StrongNameSig)</StrongName>
+    </FilesToSign>
+  </ItemDefinitionGroup>
+
+  <!-- gather the list of binaries to sign with the default certificates -->
+  <ItemGroup>
+    <FilesToSign Include="$(BinDir)*.dll" Exclude="$(BinDir)*.ni.dll" />
+    <FilesToSign Include="$(BinDir)*.exe" />
+  </ItemGroup>
+
+  <!--
+    for some reason the signing task incorrectly attemps to strong-name sign
+    native images which causes the signing step to fail for obvious reasons.
+  -->
+  <ItemGroup>
+    <FilesToSign Include="$(BinDir)*.ni.dll">
+      <StrongName>None</StrongName>
+    </FilesToSign>
+  </ItemGroup>
+
+  <!-- populates item group FilesToSign with the list of files to sign -->
+  <Target Name="GetFilesToSignItems" BeforeTargets="SignFiles">
+    <!-- read all of the marker files and populate the FilesToSign item group -->
+    <ItemGroup>
+      <SignMarkerFile Include="$(OutDir)**\*.requires_signing" />
+    </ItemGroup>
+    <ReadSigningRequired MarkerFiles="@(SignMarkerFile)">
+      <Output TaskParameter="SigningMetadata" ItemName="FilesToSign" />
+    </ReadSigningRequired>
+  </Target>
+
+  <!-- now that signing is done clean up any marker files -->
+  <Target Name="CleanUpMarkerFiles" AfterTargets="SignFiles">
+    <!-- now that the files have been signed delete the marker files -->
+    <Delete Files="@(SignMarkerFile)" />
+  </Target>
+
+</Project>