Skip to content

Add Strong name#48

Merged
JSkimming merged 3 commits intoJSkimming:masterfrom
ndrwrbgs:strongName
Aug 9, 2018
Merged

Add Strong name#48
JSkimming merged 3 commits intoJSkimming:masterfrom
ndrwrbgs:strongName

Conversation

@ndrwrbgs
Copy link
Copy Markdown
Collaborator

@ndrwrbgs ndrwrbgs commented Aug 4, 2018

Fixes #23

@codecov
Copy link
Copy Markdown

codecov bot commented Aug 4, 2018

Codecov Report

Merging #48 into master will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@          Coverage Diff          @@
##           master    #48   +/-   ##
=====================================
  Coverage     100%   100%           
=====================================
  Files           5      5           
  Lines         229    229           
  Branches        7      7           
=====================================
  Hits          229    229

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b9ca357...b56c914. Read the comment docs.

Copy link
Copy Markdown
Owner

@JSkimming JSkimming left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ndrwrbgs I'm open to being persuaded to sign the assembly, I want to check if we "really really" need this.

After a little research, I found this documentation.

For the most part, the majority of applications and libraries do not need strong-names. Strong-names are left over from previous eras of .NET where sandboxing needed to differentiate between code that was trusted, versus code that was untrusted. However in recent years, sandboxing via AppDomains, especially to isolate ASP.NET web applications, is no longer guaranteed and is not recommended.

It sounds like strong naming provides little benefit. The next point in the link document goes into the potential issues of strong naming,

  1. Binding Policy. When developers talk about strong-names, they are usually conflating it with the strict binding policy of the .NET Framework that kicks in when you strong-name. This binding policy is problematic because it forces, by default, an exact match between reference and version, and requires developers to author complex binding redirects when they don't. In recent versions of Visual Studio, however, we've added Automatic Binding Redirection as an attempt to reduce pain of this policy on developers. On top of this, all newer platforms, including Silverlight, WinRT-based platforms (Phone and Store), .NET Native and ASP.NET 5 this policy has been loosened, allowing later versions of an assembly to satisfy earlier references, thereby completely removing the need to ever write binding redirects on those platforms.

  2. Virality. Once you've strong-named an assembly, you can only statically reference other strong-named assemblies.

  3. No drop-in replacement. This is a problem for open source libraries where the strong-name private key is not checked into the repository. This means that developers are unable to build to their own version of the library and then use it as a drop-in replacement without recompiling all consuming libraries up stack to pick up the new identity. This is extremely problematic for libraries, such as Json.NET, which have large incoming dependencies. Firstly, we would recommend that these open source projects check-in their private key (remember, strong-names are used for identity, and not for security). Failing that, however, we've introduced a new concept called Public Signing that enables developers to build drop-in replacements without needing access to the strong-name private key. This is the mechanism that .NET Core libraries use by default.

<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)SharedKey.snk</AssemblyOriginatorKeyFile>
<!-- Explanation for the condition https://github.com/dotnet/cli/issues/6911#issuecomment-309647478 and https://github.com/dotnet/cli/issues/6911#issuecomment-310099022 -->
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this still needed? It looks signing is supported on CoreCLR

dotnet/roslyn#8210

@ndrwrbgs
Copy link
Copy Markdown
Collaborator Author

ndrwrbgs commented Aug 6, 2018 via email

Copy link
Copy Markdown
Owner

@JSkimming JSkimming left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok :shipit:

@JSkimming JSkimming merged commit 18935ab into JSkimming:master Aug 9, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants