Настройка пакета NuGet для добавления события сборки при установке - программирование
Подтвердить что ты не робот

Настройка пакета NuGet для добавления события сборки при установке

Кто-нибудь знает, можно ли добавить что-то в файл nuspec, чтобы при установке пакета через NuGet событие pre или post build в проект?

4b9b3361

Ответ 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`"" }