17

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

4

3 回答 3

22

我认为编辑用户的 PostBuildEvent 属性是向项目添加构建后操作的错误方法。我相信推荐的方法是将您的自定义操作放入导入项目文件的 MSBuild 目标中。从NuGet 2.5开始,如果您在包中包含一个“构建”文件夹(与内容和工具处于同一级别)并且它包含一个 {packageid}.targets 文件或 {packageid}.props 文件,NuGet 将自动添加一个 Import安装包时添加到项目文件中。

例如,您有一个名为 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 将处理在安装时插入 Import 并在卸载时将其删除。

于 2014-08-26T20:11:30.753 回答
9

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

$project.Properties.Item("PostBuildEvent").Value = "your build event here"
于 2013-07-02T11:01:23.137 回答
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`"" }
于 2013-01-08T19:18:29.933 回答