2017-10-19 44 views
1

Je rencontre des problèmes lors de l'accès à un PropertyGroup déclaré dans une cible.Groupe de propriétés MSBuild Access déclaré dans une cible extérieure

Le message dans Target affiche le numéro de version correctement. Lorsque j'essaie de publier VersionNumber et VersionInfo, je ne vois que la valeur correcte pour VersionInfo comme vrai, mais VersionNumber est affiché comme chaîne vide. Je veux que la valeur VersionNumber soit également publiée ici

Aidez-nous!

Ci-dessous est mon fichier de code:

<PropertyGroup > 
    <FileLocation>C:\Dev\version.txt</FileLocation> 
    <VersionInfo>false</VersionInfo> 
    <VersionInfo Condition="Exists('C:\Dev\version.txt')">true</VersionInfo> 
    </PropertyGroup> 

<Target Name="ReadFromFile"> 
    <ReadLinesFromFile File="$(FileLocation)" > 
    <Output PropertyName="VersionNumber" 
     TaskParameter="Lines"/> 
    </ReadLinesFromFile> 
    <Message Text="Inside Target (Version Number) : $(VersionNumber)"/> 
</Target> 

<ItemDefinitionGroup> 
    <PreBuildEvent> 
    <Command> 
     echo VersionNumber: $(VersionNumber) 
     echo VersionInfo: $(VersionInfo) 
    </Command> 
    </PreBuildEvent> 
</ItemDefinitionGroup> 
+0

Est-ce que votre cible s'exécute avant le PreBuildEvent? – stijn

+0

Oui. Il sera appelé avant PreBuildEvent – Naresh

Répondre

1

J'ai trouvé une solution pour mon problem.Even je pouvais retirer l'ensemble cible-ReadFromFile était capable de lire le contenu du fichier texte dans le groupe immobilier itself.I utilisé fonction de propriété - System.IO.File :: ReadAllText pour réaliser ma fonctionnalité. Il est avéré être une solution simple

Plus de détails sur les fonctions de propriété peuvent être trouvées here

Mon code ressemble ci-dessous maintenant:

<PropertyGroup > 
    <FileLocation>C:\Dev\version.txt</FileLocation> 
    <VersionInfo>false</VersionInfo> 
    <VersionInfo Condition="Exists('C:\Dev\version.txt')">true</VersionInfo> 
    <VersionDetails>$([System.IO.File]::ReadAllText($(FileLocation)))</VersionDetails> 
    </PropertyGroup> 

Maintenant, je peux accéder à la propriété VersionDetails partout dans le projet

+0

Les fonctions de propriété sont très cool. –

+0

Oui. Elles sont. Même la validation à l'aide de Regex était très simple en une ligne, évitant plusieurs lignes de code dans les groupes par lot/cible – Naresh