Я застрял в следующем выпуске, который у меня есть в MSBuild. У меня есть текстовый файл (buildsolutions1.txt), содержащий список (строка за строкой) со всеми решениями, которые мне нужно построить, и связанными с ними сообщениями разработчиков, разделенными запятой:Прочтите текстовый файл и разделите каждую строку в MSBuild
Common \ Common.sln, am @ email, com
ExcGw/ExcDataService.sln, pm @ email.com; am @ email, com; [email protected]; [email protected]; [email protected]
MessB/MessB/Message.sln, am @ email, com RiskS/RiskS2.sln, jp @ email.com; [email protected]; [email protected]; [email protected]; [email protected]
Мне нужно прочитать эту строку файла по отдельности, скомпилировать каждое решение, а в случае его отказа - отправить электронную почту связанным разработчикам (-ам)
Моя идея - создать группу элементов Линии, где каждый элемент является строкой из этого файла и имеет 2 значения метаданных: Решение - первая часть строки до запятой Письма - вторая часть строки от запятой до конец строки
Итак, я создал группу свойств и целевые ReadSolutions, как показано ниже.
Я прочитал файл построчно, но я не знаю, как установить метаданные для каждой позиции:
FirstPartOfTheCurrentLine (% (LinesFromFile.Identity))
SecondPartOfTheCurrentLine (% (LinesFromFile.Identity))
Этот синтаксис не работает:
% (LinesFromFile.Identity.Split (' ') [0])
% (LinesFromFile.Identity.Split (',') [1])
Возможно, кто-то k теперь, как правильно установить метаданные или, возможно, имеет другой подход к этой задаче. Благодаря
Вот код:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" DefaultTargets="CoreBuild">
<PropertyGroup>
<TPath>$(MSBuildProjectDirectory)\..\tools\MSBuild Extension Pack Binaries\MSBuild.ExtensionPack.tasks</TPath>
</PropertyGroup>
<Import Project="$(TPath)"/>
<PropertyGroup>
<!-- Default working folder -->
<RootFolder Condition=" '$(RootFolder)' == '' " >c:\ff\</RootFolder>
<BuildSolutionsFile >buildsolutions1.txt</BuildSolutionsFile>
<BuildSolutionsFileFullPath >$(RootFolder)$(BuildSolutionsFile)</BuildSolutionsFileFullPath>
</PropertyGroup>
<Target Name="ReadSolutions">
<Message Text=" Build solutions text file is : $(BuildSolutionsFileFullPath)" />
<!—Read the file and store each line as an item into LinesFromFile item group-->
<ReadLinesFromFile
File="$(BuildSolutionsFileFullPath)" >
<Output
TaskParameter="Lines"
ItemName="LinesFromFile"/>
</ReadLinesFromFile>
<Message Text="Current line : %(LinesFromFile.Identity)" />
<Message Text="===================================" />
<!—Create the other item group where each item is a line and has the metadata Solution and Emails -->
<ItemGroup>
<Lines Include="%(LinesFromFile.Identity)" >
<Solution>FirstPartOfTheCurrentLine(%(LinesFromFile.Identity))</Solution>
<Emails>SecondPartOfTheCurrentLine(%(LinesFromFile.Identity)) </Emails>
</Lines>
</ItemGroup>
<Message Text="All the Lines :%[email protected](Lines,'%0A')" />
</Target>
Вы жизнь спасителя, спасибо !!! Я бы не догадался, как это в год :-) Так что трюк нужно скопировать. значение предмета в свойство, а затем разделить его. – Teognost
Да. Я попытался использовать подстроку, но вам также нужно было бы выложить вышеуказанные вызовы, чтобы установить индекс, и это было довольно непроницаемо :) – Nicodemeus