2010-06-21 4 views
0

En appuyant sur un bouton, mon webapp copie plusieurs classes dans le projet, puis vérifie si les nouveaux fichiers contiennent une classe nommée my.namespace.myclass avec Type.GetType ("my .namespace.myclass ", false, true); Cela retourne null même si je peux voir la classe avec l'espace de noms correct, et si j'écris my.namespace.myclass dans mon code (après l'actualisation des fichiers dans VS), la classe est utilisable. Si je clique à nouveau sur le même bouton, le type est maintenant trouvé; Je devine que la classe n'a pas été compilée avant, mais c'est maintenant.Récupérer le type de nouvelles classes copiées lors de l'exécution renvoie la valeur null

Existe-t-il un moyen de forcer la compilation des fichiers avant d'essayer d'obtenir le type? J'ai essayé de redémarrer l'application asp.net par programmation, mais le type est toujours nul.

Toute aide appréciée

+0

Les fichiers .cs ne sont pas des classes, ils ne sont que des fichiers. Tant que vous ne les compilez pas, ils ne sont pas des codes exécutables. Peut-être que vous pourriez obtenir ces classes dans un autre projet, et compiler ce projet pour produire un assemblage? – SWeko

+0

c'est vrai, mais je pensais qu'ils ont été compilés instantanément en les plaçant dans app_code – Contra

Répondre

0

Je ne sais pas si je comprends bien votre question. Ce que je comprends, c'est que vous voulez charger un fichier texte (fichiers .cs sont fondamentalement des fichiers texte) et utiliser la réflexion sur le code à l'intérieur. Si je vous comprends bien, vous devez faire une compilation à l'exécution. Ce n'est pas si compliqué, mais doit encore être fait. Vous pouvez utiliser les instructions here pour cela.

0

Lorsque vous déposez des fichiers dans App_Code, ils sont compilés dans un assembly séparé et entraînent la recompilation de votre application Web. Le problème est que si vous les copiez dans App_Code, vous ne verrez pas quand vous faites Type.GetType (...) car votre version actuelle de App_Code (la version compilée en cours d'exécution) ne les contient pas. Je recommande d'essayer de les livrer d'une manière distincte. App_Code est un mécanisme spécial dans ASP.NET, je ne compterais pas là-dessus pour des applications pratiques. Je préfère que les classes soient compilées et déposées dans un autre dossier, où je peux les charger dans l'AppDomain et refléter où je dois.

Questions connexes