Группа свойств MSBuild Access объявлена ​​в объекте за пределами

У меня проблема с доступом к 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 ответ

Решение

Я нашел решение для моей проблемы. Даже я мог удалить весь Target-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>

Теперь я могу получить доступ к свойству VersionDetails в любом месте проекта

Другие вопросы по тегам