My application consists of three assemblies: a single EXE which references a couple of DLLs. The DLLs are private to my application - they are used only by this executable.
If you sign an assembly, any referenced assemblies are publicly exposed they must be signed too. Otherwise you will get a compile error for good reason.
I think the primary use for strong naming an assembly is to get it into the GAC.
I don't see a need to strong name an exe.
just my 2 pesos....
Strong naming assemblies ONLY ensures version compatibility. This is not the same thing as trusting the assembly.
In other words, the "strong name" ONLY refers to that exact assembly binary in combination with the version number in use at the time of compile.
If you GAC those assemblies, then the CLR will only verify it once. At the time the assembly is gac'd. This can result in a performance improvement. However, my experience has shown it to be minimal.
A strong named assembly can be replaced with one that is not strong named; which brings up the part about strong naming NOT being any type of security feature.
My personal opinion is that the level of pain associated with them does not justify their use. The pain being how they screw with automated testing tools.
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5054496.html
As I see it, these are the benefits to strong-name signing in this situation:
And the drawbacks to signing (I believe these are what the linked article is referring to):
It does seem a shame that the choice is either strong-naming (and thus requiring references to match an exact key and an exact version), or not strong-naming (and not requiring either to match). If it were possible to require a key but not a particular version, perhaps it would be possible to get the first 2 benefits of signing without also getting the first drawback. Maybe this is possible by applying a strong name and then dealing with the versioning issue using app.config?
Signing assemblies ensures that assemblies are not modified after compilation. And as long as you are the only private key owner no one is able to resign the assembly with your key.
Sure, this is not an absolute protection. A hacker can modify assemblies and remove strong name signatures (and references) from all assemblies. These assemblies would also work.
But in such a case you are able to say that the modifications are not made by you.