2010-09-24 6 views
1

En faisant un programme modulaire, et il prend en charge la compilation dynamique des fichiers source dans le répertoire plugin.Structure du compilateur de plugins?

Ce que je voudrais faire, pour accélérer les temps de chargement, c'est de sauvegarder les assemblages compilés dans un dossier séparé. Lorsque mon programme se charge, et rencontre un fichier source à compiler, je voudrais vérifier s'il existe un assembly déjà compilé, et l'utiliser si le fichier source n'a pas été modifié depuis lors. Si le fichier source est modifié, recompilez et remplacez l'assembly enregistré. Ma question à vous est, ce qui serait un moyen efficace, de suivre quel fichier source appartient à quel assemblage, et un moyen efficace de savoir si un fichier source a été modifié depuis le dernier chargement ou non.

Répondre

3

Suivi des modifications: Gardez MD5/CRC hashs des fichiers source sur le disque & Dernière date de modification, corréler les deux pour déterminer si les fichiers ont été modifiés.

En ce qui concerne l'assemblage source->, je suggère convention over configuration.

+0

Note: Billy ONeal a raison de dire que votre approche est probablement erronée. Vous devriez utiliser un design de plugin normal pour .NET, mais je me suis dit que je répondrais directement à votre question. – Aren

+1

Le type d'application im en développement ne fonctionnera pas correctement avec un design de plugin .Net régulier .. Je n'ai pas posé cette question pour la critique. Je l'ai demandé parce que j'ai besoin de faire quelque chose d'une manière spécifique pour cette situation et j'avais besoin d'un aperçu. – caesay

+0

@Tommy: La raison pour laquelle vous êtes critiqué est que ce que vous demandez n'a pas beaucoup de sens. Quand quelque chose n'a pas beaucoup de sens, il y aura des gens qui vous répondront en suggérant des solutions alternatives au problème qui peuvent éviter le problème original que vous avez posé. Mais si vous [refusez même de penser aux solutions alternatives, critiquant plutôt ceux qui ont pris le temps de les écrire pour vous] (http://blogs.msdn.com/b/oldnewthing/archive/2010/07/28/10043237 .aspx), vous serez critiqué. –

0

Le seul moyen (que je peux penser) pour garantir ce 100% est de conserver une copie du fichier source original avec la version compilée. Ensuite, vous pouvez faire une comparaison de fichiers entre l'original et le nouveau pour voir s'ils ont changé, et si oui, effectuez votre compilation.

+0

Comment exactement effectueriez-vous une telle comparaison? –

+0

Ou gardez un hachage! Voir ma réponse pour plus de détails. – Aren

+0

Quoi de neuf avec le downvote? Une simple comparaison binaire fonctionnerait parfaitement et se balancerait rapidement. – jvenema

1

Pourquoi voudriez-vous faire exactement cela? Toute personne qui va utiliser C# pour écrire un plugin pour vous va savoir comment utiliser Visual Studio et construire une DLL. Vous feriez mieux de définir une interface DLL pour les plugins à utiliser à la place. Alors vous ne devriez pas vous soucier de charger des temps de n'importe quelle sorte. Si le "plugin" est censé être modifié à partir de l'intérieur de votre programme lui-même, vous devriez probablement compiler quand le plugin est changé dans votre programme plutôt que d'essayer de voir quand les choses sont changées.

+0

J'ai un système de plugin très dynamique, je vais faire beaucoup d'édition de plugins, recharger des plugins, recompiler des plugins etc, et beaucoup plus facile de modifier un fichier source et cliquez sur un bouton que pour ouvrir VS et recompiler. – caesay

+0

@Tommy: Euh ... vous éditez les plugins en dehors de VS? Pourquoi? Et si c'est juste un clic sur un bouton, pourquoi ne pas seulement recompiler quand on clique sur le bouton (qui est le deuxième paragraphe de ma réponse)? –

+0

Mon programme est automatisé en partie, il sera rechargé sur les événements, et je veux le faire aussi vite que possible. donc recompiler seulement quand nécessaire. – caesay

0

Ma question est la suivante, ce serait un moyen efficace pour suivre quel fichier source appartient à laquelle l'assemblage, et un moyen efficace de suivre si un fichier source a été changé depuis la dernière charge ou non

une façon pourrait être à:

  1. Utilisez FileSystemWatcher pour suivre le fichier change
  2. Gardez une liste (ou tableau) pour maintenir source assemblage associations de fichiers.