Обновление ресурса перед многоцелевой сборкой Visual Studio .csproj

У меня есть .csproj файл с несколькими целями. Это начинается так:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net35;net40;net45;netcoreapp2.0;netstandard2.0</TargetFrameworks>
      ...

Это проект C#, который использует Selenium и должен автоматически обновлять файл javascript с помощью NPM. Каждый такой файл javascript должен быть помечен как Embedded Resource,

Я попробовал несколько способов запустить NPM перед сборкой. Я попытался написать командный файл, который запускается перед сборкой, я попытался установить расширение Nuget для обновления NPM и даже попытался добавить событие перед сборкой, которое обновляет файлы.

Проблема в том, что это происходит для каждой цели, хотя мне нужно, чтобы это произошло один раз, до начала сборки.

Я искал все соответствующие документы MSBuild, которые Microsoft предоставляет для поиска решения, но тщетно.

В настоящее время я обновляю скрипты так:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="cd $(ProjectDir)Properties\NodeResources&#xD;&#xA;call npm update &amp;&amp; copy node_modules\mycompany\firstpackage\dist ..\Resources &amp;&amp; copy node_modules\mycompany\secondpackage\dist ..\Resources" />
</Target>

<ItemGroup>
  <None Remove="Properties\Resources\script1.js" />
  <None Remove="Properties\Resources\script2.js" />
</ItemGroup>

<ItemGroup>
  <EmbeddedResource Include="Properties\Resources\script1.js" />
  <EmbeddedResource Include="Properties\Resources\script2.js" />
</ItemGroup>

У кого-нибудь есть идеи, как это сделать?

1 ответ

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

Таким образом, нет никакого контакта между процессами.

Но я предлагаю вам создать в одиночку csproj файл (это на самом деле project файл с msbuild конфигурации), без реального проекта и внутри него, переопределите цель сборки с помощью команды npm и команды для построения решения.

Другой вариант - провести msbuild property или ** переменная среды` или временный файл и т. д., и обновите их статус после первого выполнения команды, и проверьте статус перед командой. Есть оставшийся без ответа вопрос по этому поводу.

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