title: Naming main assembly (.exe) to avoid long file name: Company.Product.Application.exe
body: <p><strong>Background</strong></p>
  <p>When creating general class libraries, I mirror the Microsoft .NET Framework name structure, replacing <code>System</code> with my own company name -- i.e., <code>Tek4.Net.NetworkWidget</code>.</p>
  <p>For product-specific assemblies, I use something like <code>Tek4.ProductName.IO.FileWriter</code>.</p>
  <p><strong>Output .exe file names too long!!! <code>Company.Product.SuperApp.exe</code></strong></p>
  <p>Visual Studio uses the full assembly name for output files; this is great for DLL's, but is too much for a console application -- i.e., <code>Tek4.Utils.ConsoleApp.exe</code></p>
  <h2>Solution 1: (NOT PREFERRED)</h2>
  <p>Forego hierarchical names for main executable assemblies:</p>
  <ul>
  <li><strong>Assembly name:</strong> ConsoleApp</li>
  <li><strong>EXE File name:</strong> ConsoleApp.exe</li>
  </ul>
  <p>This solution means your delivered .exe files will only contain a simple assembly name that fails to identify itself well, and is much more subject to name collisions with other assemblies. Stack traces, .NET Reflector, etc. will only show <code>ConsoleApp</code> instead of a fully-qualified assembly name.</p>
  <h2>Solution 2: (MY CURRENT CHOICE)</h2>
  <p>Rename the output file after compilation while retaining the full internal assembly name (using a post-build event or manual rename):</p>
  <ul>
  <li><strong>Assembly name:</strong> Tek4.Utilities.ConsoleApp</li>
  <li><strong>EXE File name:</strong> Tek4.Utilities.ConsoleApp.exe --&gt; ConsoleApp.exe</li>
  </ul>
  <p>With this solution name collision is unlikely, and anywhere the assembly name shows up (i.e., stack traces, system event logs, etc.) it is easy to identify the source.</p>
  <p>For some reason, I still hate the clunky manual rename, though.</p>
  <h2>Your Solutions and Practices?</h2>
  <p>Much thanks.</p>