использовать события после сборки с установленным Fody.Costura - PullRequest
0 голосов
/ 02 октября 2018

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

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

1 Ответ

0 голосов
/ 09 октября 2018

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

  <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", которые позволяют задаче продолжать попытки до тех пор, пока файл не станет доступен (если это было проблемой), в отличие от утилит командной строки, которые простопотерпеть поражение.

Ура!

...