2009-09-21 6 views
2

Cela peut être une question étrange.faisant référence à une classe C# non compilée

J'ai besoin de lier tard une classe C# non compilée (.cs). Pas même sûr si c'est possible. La classe ne fera pas partie du projet ou référencée. La seule chose que je saurai à ce sujet est l'emplacement de son fichier.

Le fichier ne sera pas compilé lors de l'exécution car il fera partie d'un site Web app_code. Simplement essayer simplement de créer une instance de celui-ci et ensuite appeler une fonction dessus.

Est-ce même possible?

Merci à l'avance

+0

On ne sait pas si cette classe aura même été compilé à l'exécution ou ce que vous essayez de faire avec. S'il vous plaît donner plus de détails. –

Répondre

1

Il semble que vous voulez compiler et référencer votre classe lors de l'exécution. C'est définitivement possible.

Cet article devrait vous orienter dans la bonne direction ... http://support.microsoft.com/kb/304655

Gardez à l'esprit qu'une fois que vous chargez un assemblage en mémoire, vous ne pouvez pas décharger à moins que vous déchargez l'ensemble du domaine App. Donc, si vous devez être en mesure de décharger votre code, vous devrez le charger dans un nouveau AppDomain.

1

Vous n'avez pas demandé de compilation, donc je suppose que vous voulez juste instancier la classe et l'utiliser.

Vous devriez faire la classe implémente une interface couvrant les fonctionnalités dont vous avez besoin, et vous pouvez instancier en utilisant la Activator class:

ObjectHandle fooHandle = Activator.CreateInstanceFrom(
    @"C:\somePath\FooAssembly.dll", "FooNamespace.Foo"); 
IFoo foo = (IFoo)fooHandle.Unwrap(); 

La classe doit avoir un constructeur par défaut. Lors du chargement des assemblages par le nom ci-dessus, tenez compte des implications de sécurité.

0

Vous pouvez utiliser les classes CodeProvider

CodeDomProvider cdp = Microsoft.CSharp.CSharpCodeProvider.CreateProvider("CSharp"); 
CompilerResults cr = cdp.CompileAssemblyFromFile(<CompilerParameters>,<string [] of files to compiler>); 

remplacer seulement avec l'objet correct pour vos besoins et le tableau de chaînes des noms de fichiers réels.

vous pouvez également charger le code dans une chaîne et compiler directement à partir de là

L'assemblage obtenu peut alors être trouvée dans

cr.CompiledAssembly 
Questions connexes