Использовать события после сборки с установленным 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=""C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64\signtool.exe" sign /c "Code Signing - DTM" /v "$(TargetPath)"" />
<Message Text="Copy files..." Importance="high" />
<Message Text="$(TargetPath) > $(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)\HOK-Addin.bundle\Contents" Importance="high" />
<Message Text="$(TargetDir)$(TargetName).addin > $(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"
которые позволяют задаче продолжать попытки до тех пор, пока файл не станет доступным (если это было проблемой), в отличие от утилит командной строки, которые просто потерпят неудачу.
Ура!