See the question and my original answer on StackOverflow

What happens is, for some reason, when you're running a non .NET application, some types are not resolved as automatically as they are in a pure .NET context, but there is no evident error or exception raised, all fails gracefully and silently (which is a shame BTW...).

What you need to do is help the system a bit, and attach to the AssemblyResolve event, something like this:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
    {
        if (args.Name == Assembly.GetAssembly(typeof(ComLib)).FullName) // adapt to your needs
            return Assembly.GetAssembly(typeof(ComLib));

        return null;
    };