在外部目标中声明的MSBuild访问属性组

在外部目标中声明的MSBuild访问属性组,msbuild,msbuild-target,Msbuild,Msbuild Target,我在访问在目标中声明的PropertyGroup时遇到问题 目标内的消息正在正确发布版本号。当我尝试发布VersionNumber和VersionInfo时,我只能看到VersionInfo的正确值为true,但VersionNumber显示为空字符串。我希望VersionNumber值也在此处发布 请帮忙 下面是我的代码文件: <PropertyGroup > <FileLocation>C:\Dev\version.txt</FileLocation>

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

目标内的消息正在正确发布版本号。当我尝试发布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>

C:\Dev\version.txt
假的
真的
echo版本号:$(版本号)
echo版本信息:$(版本信息)

我找到了解决问题的方法。即使我可以删除整个目标ReadfromFile,也可以读取属性组本身中的文本文件内容。我使用属性函数-System.IO.file::ReadAllText来实现我的功能。 结果证明这是一个简单的解决方案

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

现在,我的代码如下所示:

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

C:\Dev\version.txt
假的
真的
$([System.IO.File]::ReadAllText($(FileLocation)))

现在,我可以访问项目中任何位置的VersionDetails属性

您的目标是否在PreBuildEvent之前运行?是。它将在PreBuildEventYes之前调用。他们是。即使使用Regex进行验证也非常简单,只需一行代码即可避免批处理/目标组中的多行代码