fluentribbon / Fluent.Ribbon

WPF Ribbon control like in Office
http://fluentribbon.github.io
MIT License
2.55k stars 516 forks source link

Fluent is not strong named any more. #527

Closed CopaDataPM closed 6 years ago

CopaDataPM commented 6 years ago

There seems to be a intentional change with version 6 in Fluent.Ribbon that assemblies are not strong named any more. All professional software products are strong named to ensure that assemblies are not replaced with any other version. Assemblies without strong name are not usable in that system. By updating to the current version we cannot compile any more without compiling Fluent.Ribbon by ourselves and publish NuGet packages (because we use NuGet Packages).

Please reconsider your decision because it generates pain.

Thanks

mmgerald commented 6 years ago

We have the same issue here - an application that uses Fluent.Ribbon as one of many libraries. Now, we have to compile Fluent.Ribbon...

mmgerald commented 6 years ago

see also #522

batzen commented 6 years ago

It was intentional. This change was announced in August 2017 with #466 and on twitter, gitter and it's the first bold marked entry for breaking changes for version 6 in the Changelog.

Strong naming is not a security feature. It can simply be bypassed by binding redirects.

mmgerald commented 6 years ago

I know that this was intentional, I see the message in twitter, gitter, changelog and #466, but that does not help. The (easy) usage of Fluent.Ribbon is limited because referencing from strong named assemblies is now a mess.

At binding redirects. Not that easy: https://stackoverflow.com/questions/2191296/net-assembly-binding-redirect-with-differing-public-key-tokens

Maybe a solution would be to publish strong named and not strong named assemblies to NuGet?

batzen commented 6 years ago

Still not a security feature. Quote from Microsoft documentation

Warning

Do not rely on strong names for security. They provide a unique identity only.

Strong naming was also removed from ControlzEx as it caused pain points when upgrading to new versions while not upgrading Fluent.Ribbon.

May i ask why you are using strong naming?

mmgerald commented 6 years ago

Maybe a misunderstanding - I don't want to discuss about security.

Strong names provide a unique identity, we have to ensure that our software have a unique identity because many components get embedded in another application (not in our hands) and that application assumes strong-named assemblies ONLY. Many assemblies we have to register in GAC, that is a prerequisite. We have several 100 libraries here, Fluent.Ribbon we use only partly, but we cannot change the whole system, the only chance is to compile Fluent.Ribbon ourselves with strong name...

batzen commented 6 years ago

@ianitor Any idea on how to publish both versions? This would also require to reference two different versions of ControlzEx.

To be honest, i don't need strong naming anymore and i don't want it back because it causes pain when upgrading versions. But i would happily accept ideas and PRs adding it back as a separate nuget package. If you plan to do a PR adding it back please wait till i merged the sdk-csproj changes to develop because the projects for different .net versions will be gone then.

chrfin commented 6 years ago

May take a look at https://www.nuget.org/packages/Brutal.Dev.StrongNameSigner/

ghost commented 6 years ago

WTF?!? I give zero f*** if it's a security feature. It's a unique signature and when I put all my assemblies together, I need a unique signature on each of them. Every other NuGet package I have has unique signatures and when my final assembly links, it expects everyone to have a unique signature. You are intentionally making life harder for us with your misunderstanding of the MS directive.

punker76 commented 6 years ago

@Dark-Bond

Strong Naming Considered Harmful : Strong naming bad. Free your bits.

Don't sign your assemblies. They want to be free. Let them live.

taken from: strongnamingconsideredharmful

And more...

Strong-named assemblies are only useful in some rare scenarios. If you need strong-named assembly then you can compile the source by yourself ore use the Strong Namer from Daniel Plaisted @dsplaisted or Strong-Name Signer from Werner van Deventer @brutaldev.

More informations about the reason of this decision can be found here: