J'ai un projet d'assistance que j'utilise dans toutes les applications que je crée. Il contient des méthodes d'extension et un ensemble de classes d'assistance génériques, de contrôles, etc. Je met à jour / étend le projet d'assistance de temps à autre. Ce sont généralement des projets de petite taille et sans rapport entre eux, et je suis la seule à travailler sur chacun d'entre eux.
J'ai essayé deux approches pour l'utiliser
- ajouter des fichiers .cs directement (Ajouter comme lien) à chaque projet où je les utilise
- compilez-le en tant que .dll et ajoutez-le comme référence
Je vois quelques avantages et inconvénients de ces approches.
Le premier:
- C’est plus simple, car les classes d’aide sont compilées dans le fichier exe. Par conséquent, je peux souvent très facilement fournir un seul fichier .exe qui fonctionnera parfaitement. Étant donné que j’ajoute un lien, je suis pratiquement sûr que, chaque fois que je construirai un projet utilisant l’aide, les fichiers d’aide seront la dernière version.
- C’est encore plus simple, car je peux séparer les fichiers pour que mes méthodes d’extension qui fonctionnent bien sur .NET 4.0 puissent être référencées séparément de celles qui requièrent .NET 4.5, ce qui signifie que l’application dans son ensemble peut s’exécuter sur .NET 4.0.
- Permet de déboguer via le code, avec tous les avantages des points d'arrêt etc etc ...
- ne semble pas être la «meilleure pratique»
Le deuxième:
- semble être la bonne approche, mais:
- exige que je fournisse un fichier .dll séparé, ce qui pour une raison quelconque est beaucoup plus difficile pour les utilisateurs (ils ont tendance à partager mes programmes sans le fichier .dll, qui se bloque ensuite au démarrage)
- lorsqu’il est compilé dans un seul fichier .dll, il aura besoin de la version la plus récente de .NET - beaucoup de mes utilisateurs n’ont pas .NET 4.5 et seuls certains éléments de ma classe d’aide en ont besoin, ce qui signifie que je peux forcer certaines personnes. mettre à jour leurs systèmes sans raison
- Je dois également m'assurer que chaque fois que je mets à jour l'un de mes programmes, je fournis également le fichier .dll - même si je ne sais pas s'il a été modifié depuis la dernière version, ou non (cela aurait pu l'être, mais pourrait aussi bien être la même version). Je ne vois pas de moyen simple de déterminer cela sans garder de trace de la version de l’assemblage, ce qui représente un travail supplémentaire. Pour le moment, lorsque je mets à jour mes programmes, je ne livre que des exes mis à jour, et j'aime bien le garder petit et discret.
Alors, quel est l’avantage réel d’utiliser le fichier .dll ici? Veuillez noter que je suis la seule personne à éditer le code de toutes les applications et des fichiers auxiliaires.
En outre, pour clarifier les choses, les applications sont généralement très petites, alors que le code contenu dans les classes d’aide est totalement générique pour chacune d’elles (quelques simples comparaisons de chaînes, chemins ou opérations XML, etc.).
En fait, quelqu'un m'a fait comprendre tout à l'heure qu'il existe une troisième option. Comme j'ai le code d'assistance dans un projet séparé, je peux ajouter ce projet aux solutions de chacune de mes applications distinctes - ce qui fonctionne un peu comme "Ajouter en tant que lien" pour des fichiers uniques, sauf que je n'ajoute qu'un seul projet ... Mais comme l'a remarqué Doc Brown, cela signifie essentiellement que .dll devra de toute façon être ajouté au projet ...
Une autre chose qui favorise en quelque sorte l’utilisation des fichiers dll est la possibilité de déboguer activement à travers la classe helper ...