10
votes

Exécuter Msbuild, respecter les projets déchargés

Dans Visual Studio, vous pouvez décharger un projet, et lorsque vous construisez la solution (clic droit / Build), le projet déchargé n'est pas construit. Toutefois, lorsque vous exécutez Msbuild à partir de la ligne de commande, comme celui-ci; xxx

le projet est construit. Existe-t-il un moyen d'obtenir Msbuild de respecter les projets déchargés dans Visual Studio?

La situation est que nous avons une solution avec un certain nombre de projets. L'un d'eux nécessite un logiciel spécial de construire, et qui existe sur notre machine de construction mais pas sur toutes les machines de développeurs. Cela signifie que je ne peux pas faire une construction de ligne de commande droite ou si elle échoue lorsqu'elle rencontre le projet voyou.

Des idées?

[EDIT: MSBuild doit pouvoir le faire, car Visual Studio utilise Msbuild pour faire le bâtiment. Que fait vs que la ligne de commande ne fonctionne pas?]


1 commentaires

Lorsque Visual Studio construit, il passe probablement explicitement explicitement les projets de compilation de MSBuild au lieu du fichier de solutions. C'est ainsi que cela peut sauter sur des projets. Ma réponse détaille une méthode alternative qui fera ce que vous voulez.


3 Réponses :


1
votes

Les informations sur la question de savoir si un projet est déchargé ou non ne va pas dans le fichier SLN, mais dans le fichier XXX.User. Par conséquent, Msbuild ne sait pas à ce sujet.

Votre meilleur pari est de créer un simple fichier MsBuild ne contenant que les projets pouvant être construits partout, par exemple: P>

<!--build selection of projects-->
<Project
  ToolsVersion="3.5"
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <DevMachine Include="A\b.vcproj"/>
    <DevMachine Include="B\b.vcproj"/>
    <DevMachine Include="C\c.vcproj"/>
  </ItemGroup>

  <ItemGroup>
    <BuildMachine Include="D\d.vcproj"/>
    <BuildMachine Include="E\e.vcproj"/>
  </ItemGroup>

  <Target Name="All">
    <CallTarget Targets="MakeDevMachine"/>
    <CallTarget Targets="MakeBuildMachine"/>
  </Target>

  <Target Name="MakeDevMachine">
    <VCBuild
      Projects="@(DevMachine)"
    />
  </Target>

  <Target Name="MakeBuildMachine">
    <VCBuild
      Projects="@(BuildMachine)"
    />
  </Target>

</Project>


0 commentaires

8
votes

Msbuild ne sait rien sur ce que l'état chargé le projet dans une solution est, de sorte que ce que vous essayez de faire n'est pas possible.

Autre alternative, vous pouvez définir une nouvelle configuration de construction appelée build_machine (à l'aide du menu Build -> Configuration Manager MENU). Dans cette configuration de construction, permettez à tous vos projets d'être construits. Ceci est alors la configuration que vous construisez sur votre (s) machine (s). Si vous désactivez le projet spécifique de la construction dans les configurations DÉTOGUG et BUILLATION (STREST> Build) (à l'aide des mêmes options de menu), vous pouvez créer ces configurations sur votre machine de développement sans avoir à décharger Le projet que vous ne voulez pas construire.

MSBUILD hommage à construire des configurations, de sorte que vous puissiez créer vos configurations de construction de machine non de construction (par exemple, débogage, version) à l'aide de Visual Studio ou Msbuild et le projet gênant ne sera pas construit.


0 commentaires

2
votes

Une solution possible consiste à utiliser le fichier Configuration de Devenv / BuildName.sln au lieu de Msbuild directement.

Cependant, dans votre solution, décharger le projet n'est pas la bonne solution pour commencer. En tant que personnes devant moi, utilisez une configuration distincte pour la machine de construction.


0 commentaires