Кто-нибудь знает, можно ли добавить что-то в файл nuspec, чтобы при установке пакета через NuGet событие pre или post build в проект?
Настройка пакета NuGet для добавления события сборки при установке
Ответ 1
Я думаю, что редактирование свойства PostBuildEvent пользователя - это неправильный способ добавить к проекту пост-сборку. Я считаю, что рекомендуемый способ заключается в том, чтобы поместить свое пользовательское действие в объект MSBuild, который импортируется в файл проекта. Начиная с NuGet 2.5, если вы включаете в свой пакет папку "build" (на том же уровне, что и контент и инструменты), и она содержит файл {packageid}.targets или {packageid}.props, NuGet автоматически добавит Импорт в файл проекта при установке пакета.
Например, у вас есть пакет MyNuGet. Вы создаете файл build\MyNuGet.targets, содержащий:
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyNuGetCustomTarget" AfterTargets="Build">
<Message Importance="high" Text="Message from MyNuGetCustomTarget. Configuration: $(Configuration)" />
</Target>
</Project>
Это создает настраиваемую цель, настроенную для запуска после стандартной сборки. NuGet будет обрабатывать вставку импорта при установке и удалении его при удалении.
Ответ 2
Это немного более чистый способ установить событие сборки из install.ps1 powershell script в пакете NuGet:
$project.Properties.Item("PostBuildEvent").Value = "your build event here"
Ответ 3
Не для самого файла .nuspec, но вы можете install.ps1
, который вы можете добавить в свой пакет с помощью nuspec. Вот что я делаю (я не знаю, если это лучший способ сделать это, но он работает):
param($installPath, $toolsPath, $package, $project)
$project.Properties | where { $_.Name -eq "PreBuildEvent" } | foreach { $_.Value = "copy `"`n`$(ProjectDir)Web.`$(ConfigurationName).config`" `"`$(ProjectDir)Web.config`"" }