Sont là de bonnes habitudes pour la cartographie des configurations de solution à des environnements et à l'aide de MsDeploy pour l'emballage par l'environnement?
La plus courte version: Prenez ce fichier, et essayer de changer la .msbuild fichier de sorte qu'un package est créé.
Détails
J'ai une solution avec un grand nombre de bibliothèques et d'un ASP.NET application MVC. Je conduis la construire avec un fichier msbuild qui appelle la principale solution et ensuite fait d'autres choses. Je veux utiliser la nouvelle msdeploy l'emballage pour préparer une .fichier zip pour distribution ultérieure, mais je vais avoir des difficultés diverses.
Ma solution dispose de 4 configurations: Local
, Dev
, Test
, et Prod
, qui correspondent à des environnements que je veux à la carte. Dans cette solution, toutes les bibliothèques ont Debug
et Release
modes comme d'habitude. Par exemple, en Local
mode solution, toutes les bibliothèques de la compilation en Debug
mode. Ensuite, l'application principale est l'appariement des environnements avec de la solution, de sorte que je peux avoir en Web.Dev.config
et ainsi de suite, ce qui semble être le moyen naturel d'utiliser les choses.
Si j'paquet comme ça:
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Site\Site.vbproj"
Targets="Package"/>
</Target>
Je reçois un problème où l' Configuration=Local
est mal mappé à la bibliothèque, des projets qui Site.vbproj
références, et il ne peut pas compiler.
Je vois deux solutions possibles: l'un, je ne peux pas obtenir de travail de droit, et l'autre est extrêmement laid.
Tentative 1
Je tente d'appeler l' Package
cible via la solution (dans cet exemple, "Applications" est le dossier de la solution que le Site du projet est en... j'ai simplifié les choses pour ce post parce qu'il existe de multiples applications dans la solution).
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Publisher.sln"
Targets="Applications\Site:Package"/>
</Target>
Je pense que c' SolutionFolder\ProjectName:Target
syntaxe est la façon de le faire, car :Clean
court... cependant, ce lève
error MSB4057: The target "Applications\Site:Package" does not exist in the project.
Tentative 2
Maintenant, pour le laid solution: il fonctionne si je modifie TOUTES mes bibliothèques avoir 4 configurations supplémentaires pour ceux de 4 configurations de solution. Cependant, c'est moche et vraiment un mauvais plan si je veux pour co-développer une bibliothèque partagée plus tard avec un projet qui a des environnements différents. Aussi, ces environnements n'ont rien à voir avec la bibliothèque et n'a de sens que dans le contexte de haut niveau des applications en utilisant les bibliothèques. Un mauvais goût.
Hein?
J'aime avoir de multiples environnements de la solution, et la fantaisie nouveau site Web.config remplacement des trucs, mais je ne sais pas comment appeler la msdeploy Package
tâche dans cette situation afin que je puisse construire le paquet dans TeamCity.
(Notez que je ne voulez probablement PAS à appeler le msdeploy ligne de commande, parce que c'est utilisé pour activer une application IIS dans un package. Pas ce que je fais ici.)
Exemple
Encore une fois, j'ai été totalement déconcerté ici, donc si vous voulez de l'aide de l'expérience, je ai mis en place cette solution d'échantillon.