title: .NET: Should executables be strong-name signed? What about private DLLs?
body: <p>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.</p>
  
  <p>Should these assemblies be given a strong name?</p>
  
  <p>FxCop suggests that they should - for all of the assemblies it currently produces:</p>
  
  <blockquote>
    <p>CA2210: Sign &lt;assembly&gt; with a strong name key.</p>
  </blockquote>
  
  <p>However, <a href="http://msdn.microsoft.com/en-us/library/h4fa028b%28VS.100%29.aspx" rel="noreferrer">this advice</a> says:</p>
  
  <blockquote>
    <p>In general, you should avoid strong-naming application EXE assemblies.</p>
  </blockquote>
  
  <p>and</p>
  
  <blockquote>
    <p>you may want to avoid strong-naming components that are private to your application.</p>
  </blockquote>
  
  <p>Should I give these assemblies a strong name? What are the benefits of doing so (or not doing so) in this case?</p>
  
  <p><strong>Edit:</strong></p>
  
  <p>Looking at several applications with a similar structure, there seems to be no consensus on this issue. The binaries of <a href="http://www.getpaint.net/" rel="noreferrer">Paint.NET</a> and <a href="http://www.codeplex.com/cracknetproject" rel="noreferrer">Crack.NET</a> are not strong-named, whereas those of <a href="http://www.red-gate.com/products/reflector/" rel="noreferrer">.NET Reflector</a> and <a href="http://blois.us/Snoop/" rel="noreferrer">Snoop</a> are.</p>
  
  <p>Interestingly, with the Expression suite Microsoft have taken the latter approach: in Expression Blend, for example, they have chosen to strong-name sign both Blend.exe and the accompanying DLLs (such as Microsoft.Expression.Blend.dll).</p>
  
  <p>It seems that I am unlikely to receive a simple answer to my first question: "Should I give these assemblies a strong name?". However, my second question still stands:</p>
  
  <p>Are there any benefits to strong-name signing binaries in this situation? Or, are there any benefits to not doing so?</p>
  
  <p><strong>Edit 2:</strong></p>
  
  <p>If there are no overwhelming reasons to go either way, I am inclined towards giving my assemblies a strong name. I'd thus be interested in whether anyone can expand upon this (from the first link):</p>
  
  <p>"strong-naming can make it more difficult to manage dependencies and add unnecessary overhead for private components."</p>