Si je compile deux fois un projet C#, j'obtiendrai deux assemblages. Ces assemblages ne sont pas exactement les mêmes (en utilisant un diff binaire). Je peux penser à des raisons pour lesquelles c'est le cas, mais il reste que la source des deux assemblées est identique.Comment est-ce que je peux patcher des assemblys .NET?
Je m'intéresse à la création d'un correctif entre ces assemblages et à l'application du correctif sur une machine client.
Est-ce que quelqu'un connaît une bibliothèque (de préférence .NET) ou un outil avec lequel je peux créer et appliquer des correctifs?
Idéalement, il devrait également gérer de petits changements, comme changer les dépendances au niveau d'un projet ou peaufiner quelques lignes dans la source. Il ne doit pas être capable de faire face à des changements plus importants, parce que je suis heureux de remplacer les assemblages dans leur intégralité dans ce cas.
Mise à jour:
Je pense un peu plus fond pourrait aider à clarifier ce que je veux en venir. J'ai un serveur d'intégration continue qui construit mon application. Je change la version du fichier et de l'assemblage pour refléter le numéro de build et la version que je construis. J'aurais pu le faire différemment, mais c'est l'option que j'aime. Cela a pour effet que les références d'assemblage changent lorsque je crée mon application, mais je suis satisfait de cela. Je suis maintenant concerné par la distribution d'une mise à jour à une version précédemment publiée. Je construis des mises à jour en utilisant InstallShield. Les assemblys disponibles pour InstallShield sont réduits à de petits correctifs. Cela n'augmente pas beaucoup la taille de la mise à jour.
Mon application a quelques fichiers de données, qui sont essentiellement des archives cryptées contenant des assemblages. InstallShield n'a pas accès à ces assemblys ou ne comprend pas mes archives. Il ne sait pas comment le déchiffrer et l'extraire. J'ai écrit ma propre routine de correctif qui trouve les fichiers modifiés dans l'archive précédente et les remplace par la nouvelle version mise à jour. Fondamentalement, une stratégie de recherche et de remplacement.
L'archive contient une centaine (et une croissance) de ces assemblys et certains de ces assemblys contiennent des fichiers de données volumineux en tant que ressources. Ces assemblages dépendent d'assemblages faisant partie de l'application. Ils sont également compilés lors de la construction de l'intégration continue. Ne pas les compiler pendant la construction laissera de la place pour les problèmes de dépendances et je ne suis pas prêt à essayer de gérer cela. Chaque fois que je crée un patch, tous ces assemblages sont inclus. Je regarde maintenant les options pour diminuer la taille du patch en générant des patches pour ces assemblages.
L'horodatage est inclus dans un assemblage compilé. c'est pourquoi cela change à chaque fois que vous compilez. – Cheeso
En outre, pourquoi voudriez-vous patcher des assemblages pour de "petits changements" et pourquoi est-il correct de les remplacer pour "de plus grands changements"? Pourquoi ne pas simplement utiliser une procédure de mise à jour: remplacer l'assemblage. – Cheeso
Hm, si la source est la même, pourquoi auriez-vous besoin de changer l'assemblage sur la machine du client? Assurez-vous simplement que le numéro de version reste le même (pas de "*" dans l'attribut AssemblyVersion!) Alors l'ancien "assembly" devrait aussi être utilisable ... – MartinStettner