在Tar​​get外部声明的MSBuild Access属性组

时间:2017-10-19 14:46:46

标签: msbuild msbuild-target

我在访问在目标内声明的PropertyGroup时遇到问题。

Target内的消息正确发布版本号。当我尝试发布VersionNumber和VersionInfo时,我只能看到VersionInfo的正确值为true,但VersionNumber显示为空字符串。我想在此处发布VersionNumber值

请帮忙!

以下是我的代码文件:

<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>

1 个答案:

答案 0 :(得分:1)

我为我的问题找到了解决方案。即使我可以删除整个Target-ReadfromFile并且可以读取属性组本身中的文本文件内容。我使用属性函数 - System.IO.File :: ReadAllText来实现我的功能。 事实证明这是一个简单的解决方案

有关属性函数的更多详细信息,请参见here

我的代码现在如下所示:

<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>

现在我可以在项目的任何地方访问VersionDetails属性