Как зациклить файл MSBuild Target с разными файлами? - PullRequest
0 голосов
/ 01 ноября 2018

У меня ниже настройки файла MSBuild Target. Это прекрасно работает с одним файлом JSON.

<Target Name="dev" 
            AfterTargets="PrepareForBuild"
            BeforeTargets="BeforeBuild"
            Condition="$(Configuration) != 'Debug'">  

        <Message Text="Building Application (dev.json)" />

        <ItemGroup>
            <ScriptFile Include="$(MSBuildThisFileDirectory)myscript.ps1" />
    </ItemGroup>
    <ItemGroup>
            <ScriptArgs Include="-Source &quot;$(MSBuildProjectDirectory)&quot;" />
            <ScriptArgs Include="-PathToManifest &quot;$(MSBuildProjectDirectory)\test\dev.json&quot;" />
        </ItemGroup>

        <Exec  Command="powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File &quot;@(ScriptFile)&quot; @(ScriptArgs,' ')" 
               Condition="Exists('@(ScriptFile)')" />
        <Error Condition="!Exists('@(ScriptFile)')"
               Text="Script file: &quot;@(ScriptFile)&quot; not found. Existing dev.json incomplete!" />

    </Target>

Я проверил несколько вопросов здесь, но мне не помогло размещение здесь. Как добавить это в цикл, чтобы я мог запустить один и тот же сценарий с разными файлами JSON?

У меня настроено test\dev.json, и у меня test.json, prod.json.

Все остается прежним, но входной файл должен быть циклическим.

Я попробовал предложение как ниже, но все еще не работало.

 <ItemGroup>
        <MyJsonFile Include="dev.json" />
        <MyJsonFile Include="test.json" />
        <MyJsonFile Include="prod.json" />
 </ItemGroup>
 <ItemGroup>
        <ScriptFile Include="$(MSBuildThisFileDirectory)myscript.ps1" />
 </ItemGroup>
 <ItemGroup>
        <ScriptArgs Include="-Source &quot;$(MSBuildProjectDirectory)&quot;" />
        <ScriptArgs Include="-PathToManifest &quot;$(MSBuildProjectDirectory)\test\%(MyJsonFile.Identity)&quot;" />
    </ItemGroup>
<Target Name="dev" 
            AfterTargets="PrepareForBuild"
            BeforeTargets="BeforeBuild"
            Condition="$(Configuration) != 'Debug'">  
<Exec  Command="powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File &quot;@(ScriptFile)&quot; @(ScriptArgs,' ')" 
               Condition="Exists('@(ScriptFile)')" />
        <Error Condition="!Exists('@(ScriptFile)')"
               Text="Script file: &quot;@(ScriptFile)&quot; not found. Existing dev.json incomplete!" />

    </Target>

Я получаю

Невозможно проверить аргумент для параметра 1> 'PathToManifest'.

Я попытался переместить ItemGroup моей ScriptArgs в Target, но это выдает другую ошибку

Невозможно связать параметр, поскольку параметр 1> 'PathToManifest' указано более одного раза. Чтобы обеспечить несколько значений параметров которые могут принимать несколько значений 1>, используйте синтаксис массива.

1 Ответ

0 голосов
/ 01 ноября 2018

Как зациклить файл MSBuild Target с разными файлами?

Вы можете добавить эти различные JSON-файлы в ItemGroup, а затем использовать метаданные элемента MSBuild Identity для зацикливания этих входных файлов, например:

  <ItemGroup>
    <MyJsonFile Include="test.json" />
    <MyJsonFile Include="dev.json" />
    <MyJsonFile Include="prod.json" />
  </ItemGroup> 

Затем используйте %(MyJsonFile.Identity) для зацикливания этих входных файлов:

<ItemGroup>
        ...
        <ScriptArgs Include="-PathToManifest &quot;$(MSBuildProjectDirectory)\test\%(MyJsonFile.Identity)&quot;" />

</ItemGroup>

Проверьте эту ветку для более подробной информации.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...