Un assembly C # .dll peut-il contenir un point d'entrée?

Mon but est de créer un exécutable qui va démarrer une ombre copié application. Le truc, c'est, je veux que ce programme de démarreur ne pas avoir de dépendances externes et ne contenir aucun des connaissances sur le programme, il doit commencer.

Je veux aussi qu'il soit le seul exécutable dans le répertoire. En d'autres termes, je veux qu'elle "exécuter".dll assemblée pas .exe assemblée. (Je peut exiger que le nom de l' .dll fichier en cours de chargement dans un nouveau domaine d'application-être la même à chaque fois, comme Main.dll ou quelque chose comme ça).

Il ressemblait Domaine d'application.ExecuteAssembly serait faire exactement ce que je voulais. Il dit qu'il va commencer l'exécution sur le "point d'entrée spécifiée dans le .NET Framework-tête.".

Lorsque j'essaie d'utiliser cette fonction, je reçois l'erreur "point d'Entrée introuvable dans l'assembly 'DllApp'".

Le programme de démarreur que j'ai, juste essayer d'exécuter l'assemblée:

static void Main()
{
    AppDomain domain = AppDomain.CreateDomain( "DllApp" );
    domain.ExecuteAssembly( "DllApp.dll" );
}

Le code de l'application, dans une .fichier dll, avec une valeur par défaut: point d'entrée

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault( false );
        Application.Run( new Form1() );
    }
}

Cette page sur le main() fonctions dit que "les Bibliothèques et les services ne nécessitent pas de méthode main comme un point d'entrée". Cela ne veut pas dire qu'ils ne peut pas ont une valeur par défaut de point d'entrée.

J'ai essayé toutes les différentes permutations de privé/public static void main, un retour int type, string[] args comme arguments, avec un espace de noms, pas de noms, statique/non-classe statique, etc.

J'ai pu modifier mon code pour hériter de MarshalByRefObject, puis utiliser la méthode CreateInstance pour créer un objet, mais qui semble comme il sera plus étroitement couple le démarreur pour le programme, il est censé commencer. Si je pouvais utiliser ExecuteAssembly, la demande a commencé voudrais juste besoin d'un static void main, et c'est vraiment simple et dur de désordre.

Est-il possible pour un .dll assemblée d'avoir un défaut de point d'entrée, et pour ExecuteAssembly pour la trouver, ou dois-je me résigner à aller un autre itinéraire?

source d'informationauteur Sean