Когда msbuild определяет список файлов для сборки, используя новый неявный формат csproj? - PullRequest
0 голосов
/ 27 сентября 2019

Visual Studio 2019, с новым «неявным» форматом проекта C #, в котором вы не включаете файлы в csproj.

Существует предварительное задание, которое генерирует два файла .cs, но, очевидно, когдаmsbuild вызывает csc (после события перед сборкой), он не включает эти два файла в список файлов для компиляции.Я даже пытался ввести 30-секундную задержку.Таким образом, похоже, что msbuild исправляет список файлов перед запуском события перед сборкой.

Очевидно, что после первого раза это не проблема, но это не очень хорошо на сервере сборки или новом устройстве dev.

Есть ли чистое решение для этого?

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

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

<Target Name="GenerateStuff" BeforeTargets="BeforeBuild">
  <Exec Command="generate foo.cs" />
  <ItemGroup>
    <Compile Include="foo.cs" Exclude="@(Compile)" />
  </ItemGroup>
</Target>

Эта запись также поддерживает символы подстановки (Include="gen*.cs")

0 голосов
/ 27 сентября 2019

Нашел решение:

Добавьте атрибут InitialTargets к элементу проекта:

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

Измените PreBuild на

<Target Name="Generation">
  <Exec Command="whatever" />
</Target>

(обратите внимание, что если у вас Visual Studioоткрыто, это работает почти слишком хорошо, так как файлы будут появляться автоматически даже без сборки!)

...