【发布时间】:2012-10-28 18:09:54
【问题描述】:
有谁知道是否可以在 nuspec 文件中添加一些内容,以便在通过 NuGet 安装包时将构建前或构建后事件添加到项目中?
【问题讨论】:
标签: nuget-package build-events
有谁知道是否可以在 nuspec 文件中添加一些内容,以便在通过 NuGet 安装包时将构建前或构建后事件添加到项目中?
【问题讨论】:
标签: nuget-package build-events
我认为编辑用户的 PostBuildEvent 属性是向项目添加构建后操作的错误方法。我相信推荐的方法是将您的自定义操作放入导入项目文件的 MSBuild 目标中。从NuGet 2.5 开始,如果您在包中包含一个“构建”文件夹(与内容和工具处于同一级别)并且它包含一个 {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 将处理在安装时插入 Import 并在卸载时将其删除。
【讨论】:
这是从 NuGet 包中的 install.ps1 powershell 脚本设置构建事件的更简洁的方法:
$project.Properties.Item("PostBuildEvent").Value = "your build event here"
【讨论】:
不要添加到 .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`"" }
【讨论】: