Question

J'ai un fichier de projet msbuild utilisé pour générer plusieurs projets C ++ (* .vcproj). Voici une partie d'un fichier de projet typique dans lequel les variables d'environnement globales de la construction sont remplacées en tant que propriétés:

<PropertyGroup>
  <MYBINDIR>d:\buildsysroot\bin</MYBINDIR>
  <MYLIBDIR>d:\buildsysroot\lib</MYLIBDIR>
  ...
</PrpertyGroup>

<ItemGroup>
  <MyItems Include="d:\buildsysroot\myproject\myproject.vcproj"/>
</ItemGroup>

<Target Name="Release_x64">
  <VCBuild Projects="@(MyItems)" Configuration="Release_dll|x64"/>
</Target>

Ces variables d'environnement sont utilisées par tous les fichiers vcproj, via les feuilles de propriétés. Voici un extrait d'un vcproj:

<Configuration
  Name="Release_dll|x64"
  ConfigurationType="1"
  InheritedPropertySheets="$(BUILDPROPSDIR)\defaults.vsprops;$(BUILDPROPSDIR)\build_dll.vsprops"
>

Et voici à quoi ressemblent les feuilles de propriétés:

<VisualStudioPropertySheet
  Name="defaults"
  OutputDirectory="$(MYBINDIR)\_$(ConfigurationName)_$(PlatformName)"
  IntermediateDirectory="$(MYBUILDDIR)_$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
  >
  <Tool
    Name="VCLinkerTool"
    AdditionalLibraryDirectories="&quot;$(MYLIBDIR)&quot;"
  />
<VisualStudioPropertySheet/>

Le problème est le suivant: lors de la construction, la valeur des variables d'environnement déclarées dans le fichier msbuild (MYBINDIR, MYLIBDIR) ne figure pas dans les feuilles de propriétés, mais semble être locale pour le fichier msbuild uniquement: au sein du projet msbuild MYBINDIR se développe en "d: \ buildsysroot \ bin", mais dans le projet vc, MYBINDIR se développe en "d: \ projects \ bin", qui correspond à la valeur que j'ai définie globalement (par exemple, via MyComputer- > Advanced- > EnvironmentVariables) et qui doivent y rester car c’est ainsi que mon environnement de développement principal est configuré.

Comment transférer l'environnement défini dans le fichier msbuild à la tâche VCBuild?

Je sais que ce problème pourrait être résolu en utilisant un fichier de commandes et en déclarant l'environnement utilisant "set", et non dans le fichier msbuild; C’est comme ça que j’avais l'habitude de le faire, mais je préfère la méthode ci-dessus car il ne s'agit que d'un appel à msbuild avec un argument, et c'est tout.

MODIFIER

J'avais besoin d'une solution rapidement et je proposais une tâche personnalisée qui définissait l'environnement de la même manière qu'un fichier de commandes, mais avec l'avantage de le faire dans msbuild .. La méthode Execute () de la tâche utilise simplement Environnement. SetEnvironmentVariable (var, val). Cela nécessite toujours de définir l'environnement du processus, je serais heureux de savoir s'il existe un autre moyen!

Était-ce utile?

La solution

étant donné que personne d'autre n'a répondu / commenté, je vais y aller avec ma propre réponse: une tâche personnalisée qui définit l'environnement du processus à l'aide de Environment.SetEnvironmentVariable (var, val)

Autres conseils

Je ne sais pas si cela va à ce que vous essayez de faire. Mais avez-vous essayé la commande "Remplacer"? attribut sur la tâche VCBuild? Son utilisation n’est pas évidente. Mais j’ai fait créer par VS un .vsprops avec les attributs qui me tenaient à cœur (OutputDirectory et IntermediateDirectory). J'ai ensuite modifié le fichier .vcproj pour supprimer l'attribut InheritedPropertySheets ajouté. Ensuite, j'ai ajouté un attribut Override à la tâche VCBuild dans mon fichier MSBuild. Cela semble m'avoir donné le comportement que je cherchais. Peut-être un problème différent, cependant ...

Donnie

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