Использовать события после сборки с установленным Fody.Costura

После того, как я добавил Fody.Costura в свой проект, мое событие после сборки, которое копировало получившуюся сборку в другое место, начало сбой с сообщением об отказе в доступе. Это имеет смысл, поскольку Costura использует MSBuild для встраивания сборок. Есть ли способ заставить мои пост-сборки выполняться после завершения Costura? Пример команды после сборки:

copy /Y "$(TargetPath)" "%ALLUSERSPROFILE%\Autodesk\Revit\Addins\2019\HOK-Addin.bundle\Contents"

1 ответ

В основном решение моего собственного вопроса заключается в следующем.

  <Target Name="CopyFiles" AfterTargets="AfterBuild;NonWinFodyTarget">
    <Message Text="Signing file..." Importance="high" />
    <Exec Command="&quot;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64\signtool.exe&quot; sign /c &quot;Code Signing - DTM&quot; /v &quot;$(TargetPath)&quot;" />
    <Message Text="Copy files..." Importance="high" />
    <Message Text="$(TargetPath) &gt; $(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)\HOK-Addin.bundle\Contents" Importance="high" />
    <Message Text="$(TargetDir)$(TargetName).addin &gt; $(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)" Importance="high" />
    <Copy SourceFiles="$(TargetPath)" DestinationFolder="$(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)\HOK-Addin.bundle\Contents" ContinueOnError="true" />
    <Copy SourceFiles="$(TargetDir)$(TargetName).addin" DestinationFolder="$(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)" ContinueOnError="true" />
  </Target>

Что я сделал, так это заменил стандартную команду Post Build, которая запускает процедуры командной строки, на MSBuild Target и Task. Предоставление флагов для запуска после завершения сборки и завершения Fody, объединение сборок решает мою проблему.

Что также помогает, тот факт, что Tasks иметь флаги как ContinueOnError="true" которые позволяют задаче продолжать попытки до тех пор, пока файл не станет доступным (если это было проблемой), в отличие от утилит командной строки, которые просто потерпят неудачу.

Ура!

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