J'essaie de définir des variables d'environnement à l'aide d'un fichier de projet (ex. .Vcxproj)
J'ai regardé les fonctions de la propriété mais cela ne semblait pas avoir cette fonction.
Je sais qu'il existe un moyen de récupérer la variable d'environnement, mais je ne trouve pas comment le définir.
Je pense qu'il devrait y avoir moyen de définir des variables d'environnement dans un fichier de projet.
Un certain nombre de choses:
1) Si vous utilisez uniquement la variable dans le contexte de MSBuild, vous pouvez simplement utiliser les variables standard MSBuild au lieu d'essayer de définir une variable d'environnement.
2) Si vous devez définir une variable env, eh bien, ce n'est pas une solution originale. Vous devez écrire une tâche personnalisée, puis l'exploiter dans le fichier de projet. Voici un lien vers un thread MSDN qui explique comment procéder.
http://social.msdn.Microsoft.com/forums/en-US/msbuild/thread/0fb8d97d-513e-4d37-8528-52973f65a034
La tâche codée peut être placée directement dans le fichier de projet depuis MSBuild v4.0. Comme ça:
<UsingTask
TaskName="SetEnvironmentVariableTask"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v$(MSBuildToolsVersion).dll">
<ParameterGroup>
<Name ParameterType="System.String" Required="true" />
<Value ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Using Namespace="System" />
<Code Type="Fragment" Language="cs">
<![CDATA[
Environment.SetEnvironmentVariable(Name, Value);
]]>
</Code>
</Task>
</UsingTask>
Notez que dans MSBuild 14+, la référence AssemblyFile doit être simplement:
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll"
La SetEnvironmentVariableTask
peut ensuite être utilisée à partir de la cible:
<Target Name="SampleTarget" BeforeTargets="Build">
<SetEnvironmentVariableTask Name="TEST_ENV_VAR" Value="$(MSBuildProjectName)" />
</Target>
C'est beaucoup plus pratique que de créer un fichier .DLL séparé pour les petites tâches MSBuild.
Vous pouvez envisager d'écrire les variables d'environnement dans un fichier texte (.cmd) en tant que séquence de lignes SET XXX = $ (XXX). Puis exécutez le .cmd dans la fenêtre de commande.
par exemple. Définissez un ItemGroup avec toutes les commandes SET, puis utilisez la tâche 'WriteLinesToFile' pour écrire chaque élément sur une ligne du fichier texte .cmd.
<ItemGroup>
<BuildEnvItem Include="REM This file is auto generated. Do not edit" />
<BuildEnvItem Include="SET TEST_ENV_VAR=$(TEST_ENV_VAR)" />
<!-- add more as needed -->
<ItemGroup>
<Target Name="DefineBuildEnvironmentVariables">
<WriteLinesToFile File="Build_env.cmd" Lines="@(BuildEnvItem)" Overwrite="true" Encoding="Unicode"/>
</Target>
Cela peut être utile dans le cas où un fichier .cmd existant utilise msbuild. Le fichier .cmd initial utilise msbuild pour générer le fichier Build_env.cmd, puis appelle Build_env.cmd avant de continuer.