配置NuGet包以在安装时添加构建事件

时间:2012-11-08 14:23:16

标签: nuget-package build-events

有没有人知道是否可以在nuspec文件中添加一些内容,以便在通过NuGet将一个包安装到项目的前置或后期构建事件时?

3 个答案:

答案 0 :(得分:18)

我认为编辑用户的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>

这将创建一个自定义目标,该目标配置为在标准Build目标之后运行。 NuGet将处理在安装时插入导入并在卸载时删除它。

答案 1 :(得分:9)

这是从NuGet包中的install.ps1 powershell脚本设置构建事件的一种稍微简洁的方法:

$project.Properties.Item("PostBuildEvent").Value = "your build event here"

答案 2 :(得分:6)

不是.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`"" }