Skip to content

Commit b10062f

Browse files
anderslaubShane32
andauthored
Feature/assembly strongname (#262)
* added strong name signing using publicsign * version prefix * private key assembly signing, friend assemblies shared public key prop * changed signassembly condition * conditional signing, only sign when netstandard target build * simplified conditional signing, fixed tests for netcore3.1 net5 targets * reverted strong name * Update src/_SignAssembly.targets Co-authored-by: Shane Krueger <[email protected]> * removed conditional assembly signing, now also sign net6 * added condition so it is possible to override SignAssembly if ever needed Co-authored-by: Anders Laub <[email protected]> Co-authored-by: Shane Krueger <[email protected]>
1 parent 544c291 commit b10062f

File tree

6 files changed

+47
-2
lines changed

6 files changed

+47
-2
lines changed

src/Directory.Build.props

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@
2323
<Nullable>enable</Nullable>
2424
<ImplicitUsings>enable</ImplicitUsings>
2525
<PackageReadmeFile Condition="'$(IsPackable)' == 'true'">README.md</PackageReadmeFile>
26+
27+
<!--
28+
Strong name signing of netstandard assemblies for better cross-runtime compatibility
29+
30+
Ref: https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/strong-name-signing-exceptions#recommended-action
31+
-->
32+
<SignAssembly>true</SignAssembly>
33+
<CustomBeforeMicrosoftCommonTargets>$(MSBuildThisFileDirectory)_SignAssembly.targets</CustomBeforeMicrosoftCommonTargets>
2634
</PropertyGroup>
2735

2836
<ItemGroup Condition="'$(IsPackable)' == 'true'">

src/GraphQLParser.sln

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1515
..\.gitignore = ..\.gitignore
1616
Directory.Build.props = Directory.Build.props
1717
Directory.Build.targets = Directory.Build.targets
18+
graphql.snk = graphql.snk
1819
..\LICENSE.md = ..\LICENSE.md
1920
..\assets\logo.64x64.png = ..\assets\logo.64x64.png
21+
public.snk = public.snk
2022
..\README.md = ..\README.md
23+
_SignAssembly.targets = _SignAssembly.targets
2124
EndProjectSection
2225
EndProject
2326
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphQLParser.ApiTests", "GraphQLParser.ApiTests\GraphQLParser.ApiTests.csproj", "{6F01D881-DEA2-4259-977B-FF56DD366592}"
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<Description>Library containing lexer and parser for GraphQL syntax</Description>
@@ -7,6 +7,7 @@
77
<TargetFrameworks>netstandard2.0;netstandard2.1;net6</TargetFrameworks>
88
<PackageId>GraphQL-Parser</PackageId>
99
<PackageTags>GraphQL;json;api;parser</PackageTags>
10+
<_FriendAssembliesPublicKey>PublicKey=0024000004800000940000000602000000240000525341310004000001000100352162dbf27be78fc45136884b8f324aa9f1dfc928c96c24704bf1df1a8779b2f26c760ed8321eca5b95ea6bd9bb60cd025b300f73bd1f4ae1ee6e281f85c527fa013ab5cb2c3fc7a1cbef7f9bf0c9014152e6a21f6e0ac6a371f8b45c6d7139c9119df9eeecf1cf59063545bb7c07437b1bc12be2c57d108d72d6c27176fbb8</_FriendAssembliesPublicKey>
1011
</PropertyGroup>
1112

1213
<ItemGroup>
@@ -15,7 +16,8 @@
1516
</ItemGroup>
1617

1718
<ItemGroup>
18-
<InternalsVisibleTo Include="$(MSBuildProjectName).Tests;$(MSBuildProjectName).Benchmarks"/>
19+
<InternalsVisibleTo Condition="'$(SignAssembly)' == 'true'" Include="$(MSBuildProjectName).Tests, $(_FriendAssembliesPublicKey);$(MSBuildProjectName).Benchmarks, $(_FriendAssembliesPublicKey)"/>
20+
<InternalsVisibleTo Condition="'$(SignAssembly)' != 'true'" Include="$(MSBuildProjectName).Tests;$(MSBuildProjectName).Benchmarks"/>
1921
</ItemGroup>
2022

2123
</Project>

src/_SignAssembly.targets

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<Project>
2+
<!--
3+
Strong name signing of netstandard assemblies for better cross-runtime compatibility.
4+
5+
Ref: https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/strong-name-signing-exceptions#recommended-action
6+
-->
7+
8+
<PropertyGroup Condition="'$(SignAssembly)' == 'true'">
9+
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)graphql.snk</AssemblyOriginatorKeyFile>
10+
<PublicKeyToken>e6238258560628ee</PublicKeyToken>
11+
</PropertyGroup>
12+
13+
14+
<!--
15+
Workaround for: https://github.com/Microsoft/msbuild/issues/1490 (lack of support for public-signing satellites)
16+
Delay-signs the satellite assemblies when main assembly is public-signed.
17+
18+
Ref: https://github.com/dotnet/project-system/blob/main/eng/imports/StrongName.targets
19+
-->
20+
<Target Name="PrepareToDelaySignSatelliteAssemblies" BeforeTargets="GenerateSatelliteAssemblies" Condition="'$(MSBuildRuntimeType)' != 'Core' and '$(SignAssembly)' == 'true'">
21+
<PropertyGroup>
22+
<_DelaySignMainAssembly>$(DelaySign)</_DelaySignMainAssembly>
23+
<DelaySign Condition="'$(PublicSign)' == 'true'">true</DelaySign>
24+
</PropertyGroup>
25+
</Target>
26+
27+
<Target Name="CleanupAfterDelaySigningSatelliteAssemblies" AfterTargets="GenerateSatelliteAssemblies" Condition="'$(MSBuildRuntimeType)' != 'Core' and '$(SignAssembly)' == 'true'">
28+
<PropertyGroup>
29+
<DelaySign>$(_DelaySignMainAssembly)</DelaySign>
30+
</PropertyGroup>
31+
</Target>
32+
</Project>

src/graphql.snk

596 Bytes
Binary file not shown.

src/public.snk

160 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)