There is one important consideration of using an exe to host types... it isn't very well supported by VS2005. The compiler (csc), runtime, etc all see no real problems - simply that the IDE isn't very happy about adding references to exe files.
This is fixed in VS2008, but if you need to support VS2005 developers, I would recommend using a dll for the reference.
At the assembly level, there isn't a huge amount of difference.
For distinguishing between the two (exe/dll) - check for an entry-point on the assembly:
using System;
using System.Reflection;
using System.Net;
class Program {
static void Main() {
IsItAnExe(typeof(Program).Assembly); // this one ;-p
IsItAnExe(typeof(string).Assembly); // mscorlib
IsItAnExe(typeof(WebClient).Assembly); // System
}
static void IsItAnExe(Assembly assembly) {
MethodInfo entryPoint = assembly.EntryPoint;
Console.WriteLine(assembly.GetName().Name + ": " +
(entryPoint == null ? "no entry-point" :
(entryPoint.DeclaringType.FullName + "." + entryPoint.Name)));
}
}