2012-05-25 6 views
5

Je dois faire le même programme pour deux sociétés différentes (logo différent, nom différent). Je voudrais que ce soit fait automatiquement quand je fais une version. Je pense utiliser un fichier de ressources ou un assemblage satellite, mais je ne suis pas sûr de savoir comment procéder.Compiler deux versions du programme C# automatiquement

De quelle façon pensez-vous être le meilleur?

Merci.

EDIT:

  • Les différences ne sont qu'une image et une chaîne. Je veux avoir tout généré en un clic. Nous pourrions obtenir plus de clients dans l'avenir.
  • Je dois aussi ajouter que j'utilise SmartAssembly pour fusionner toutes mes dépendances dans un fichier exe.
+0

Dépend de exactement ce qui est requis, est-ce juste des ressources de marquage de texte (et externes) ou ...? Dès que X veut des fonctionnalités Y ou a une logique métier Z ... –

+0

Salut, ce sont des ressources mixtes, une image et une chaîne. As tu des idées? – John

+0

Potentiel pour plus de clients crie la modularité. C'est pour ça que les DLL ont été faites. –

Répondre

1

Le meilleur que je peux penser d'un script de lot. Obtenez votre projet pour référencer des fichiers (images (logo), texte (nom de l'entreprise), etc). c'est-à-dire C: \ MyProject \ Resources. Ainsi, lors de la construction du projet, il se conforme à l'application/installateur, etc.

De cette façon, vous pouvez écrire un script (fichier .bat) qui copie dans les ressources nécessaires par entreprise.

Étape 1 - Supprimez tous les fichiers dans le dossier Ressources

Étape 2 - Utilisez MSBuild.exe pour vous construire des projets

Étape 3 - Copiez les fichiers nécessaires à partir du dossier bin/release dans un répertoire (c'est à direC: \ Release \ CompanyA)

Étape 4 - Modifiez les variables du script pour charger les détails de la société suivante. Et répétez à partir de l'étape 1, afin qu'il copie sur les fichiers de ressources nécessaires et reconstruit.

+1

Merci pour votre réponse. Je n'y ai pas pensé, c'est peut-être la meilleure solution. – John

+1

C'est une solution simple (pas du tout élégante), mais si vous faites de plus en plus d'entreprises, je vous conseille d'aller avec les autres solutions comme l'utilisation de DLL comme modules. Ou si vous obtenez plus de personnalisations, pensez à utiliser quelque chose comme Git/SVN et branchez le projet. Puis automatiser une extraction et construire en utilisant des outils comme TeamCity – JonWillis

+0

Enfin, j'ai fait un lot et Im en utilisant un symbole de compilation conditionnelle pour obtenir le bon fichier de ressources. – John

2

La chaîne de ressources dans un assemblage séparé serait la distribution la plus facile.

Mais honnêtement, je l'aurais une fonctionnalité de personnalisation. La dernière chose que vous voulez est de maintenir les changements de logo de tout le monde en raison de: raisons légales, copywrite cas, licence artistique fantaisiste, etc

Ce qui est court pour .... leur fournir une image formatée, et leur assigner la nom de l'entreprise pendant l'installation et stocker dans le registre ou dans un méta-fichier de quelque type (XML, manifeste, etc.)

+0

Merci pour votre réponse. Comment puis-je avoir les 2 versions de l'assemblage séparé dans un projet VS? – John

+0

@Abatonime Vous les compilez dans différents dossiers. –

4

Vous pouvez créer une bibliothèque de classes qui contient 99% du code, puis avoir deux projets qui chaque référence la bibliothèque commune avec le 1% qui diffère pour chaque entreprise. Ensuite, une construction de l'ensemble de la solution va générer un exécutable pour chaque entreprise. Utilisez ceci si les différences entre les souhaits de chaque entreprise sont suffisantes pour que vous ayez besoin d'un code [légèrement] différent.

Alternativement, vous pouvez faire en sorte que les sections qui varient dépendent des données, pas du code. Dans ce cas, il peut s'agir d'obtenir le logo d'un fichier plutôt que de l'intégrer dans l'exécutable et d'avoir un fichier xml de configuration avec le nom de l'entreprise. Cela vous permettrait d'avoir un seul exécutable pour les deux sociétés.

+0

??? Je suppose que sa compagnie n'aura jamais plus de 2 clients ... jamais. –

+3

@Xaade Avez-vous arrêté de lire après le premier paragraphe? Et aussi, il y a des projets spécifiques qui peuvent très bien n'avoir que deux clients, ou plus probablement un build pour "tout le monde" et un pour l'entreprise qui a payé pour avoir une fonctionnalité personnalisée ajoutée juste pour eux. – Servy

+0

Oui, le premier m'a fait mal aux yeux. –

Questions connexes