Почему Exec Command не работает в.csproj для netstandard2.0?

Я занят перемещением своего кода из библиотек.Net Framework в библиотеки.netstandard2.0. Пока все идет хорошо, но теперь я застрял в файле.csproj.

В существующем файле проекта это определено

  <Target Name="Rebuild">
    <Exec Command="echo Now Rebuilding the package" />
  </Target>

Фактическая команда выполняет исполняемый файл, который генерирует кучу классов XML на основе XSD.

Я не могу заставить это работать в проекте.netstandard2.0?

Я искал везде, но я не могу найти причину этого не работает...

1 ответ

Решение

Я подозреваю, что в вашем конкретном случае Rebuild target будет перезаписан целями sdk, которые неявно импортируются после вашего кода. Если вы хотите перезаписать задачи, предоставляемые SDK, вам нужно перейти к явному импорту SDK (вместо <Project Sdk="...">):

<Project>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
  <!-- other project content -->
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
  <Target Name="Build">
    <!-- overwrite Build target here -->
  </Target>
  <Target Name="Rebuild">
    <!-- overwrite Rebuild target here -->
  </Target>
</Project>

Exec цель поддерживается, хотя echo Команда может работать или не работать в зависимости от платформы, на которой вы ее запускаете (поскольку echo может быть просто встроенной командой оболочки, но без исполняемого файла, который можно запустить).

Удостоверься что:

  • Команда начинается с пути к исполняемому файлу, который находится на PATH или указывается абсолютное или относительно строящегося файла csproj.
  • Цель фактически выполнена. Например, некоторые программы могут использовать /t:Clean;Build вместо /t:Rebuild,
Другие вопросы по тегам