Question

Je suis en train de créer une application peut modifier les propriétés en IL pour créer un exécutable légèrement différent. Un client exécute par exemple l'application et une étiquette sur l'étiquette WinForm Reads "Client A:". Client B exécute l'application et étiquette indique « B client ». Je sais facile à l'aide des fichiers de configuration ou les fichiers de ressources, mais thats pas une option pour ce projet. Le programme principal doit être en mesure de générer des fichiers .exe dynamiquement en fonction des champs de formulaire entrés par l'utilisateur.

Ma solution a été de créer un exécutable autonome qui contenait tous les éléments que je avais besoin pour dynamiser. J'ai ensuite utilisé pour générer ildasm l'IL et je pensais que je pouvais utiliser IL et les balises de substitution pour les éléments que je voulais faire dynamique. Je pourrais alors remplacer ces balises lors de l'exécution après que l'utilisateur a rempli le formulaire à l'aide regex etc. Le problème est, si je le re enregistrer le fichier IL généré par ILDASM comme un exe et d'essayer de l'exécuter. Je lance simplement la console et ne fait rien.

Vais-je sur ce dans le mauvais sens? Je ne voulais plonger dans la réflexion comme .exe dynamique est un très simple et je pensais que l'ingénierie inverse IL avec ildasm serait le moyen le plus rapide.

pensées et pointeurs sont très appréciés. Tony

Était-ce utile?

La solution

L'exécutable généré sur le site? Ou avez-vous générer l'exécutable pour un client, puis expédier le résultat?

Si vous êtes une génération de l'exécutable, vous pouvez mettre les données / code spécifique au client dans une DLL séparée et intégrez dans votre exécutable en tant que ressource, et de le charger lorsque l'événement se produit AppDomain.CurrentDomain.AssemblyResolve.

De cette façon, vous pouvez avoir le contrôle de version sur les données spécifiques au client.

Autres conseils

Quand vous dites « re-save » le fichier créé par ildasm et exécutez-vous dire que vous utilisez tous les fichiers IL par ilasm (le compilateur fourni Microsoft IL)? Sinon, vous pouvez essayer. Ne soyez très prudent lorsque vous effectuez votre substitution comme IL a des exigences bien précises et ilasm n'est pas aussi indulgent que les compilateurs de niveau supérieur comme csc et vbc.

Vous pouvez également utiliser Mono.Cecil pour modifier les fichiers d'assemblage, de cette façon vous n » t doivent expédier IL à vos clients.

Si vous allez continuer sur la voie d'expédition de la source et le compiler vous pouvez accomplir la même chose sans impliquer IL en expédiant la source C # et le compiler sur place depuis est inclus csc dans le cadre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top