【问题标题】:Configure NuGet package to add a build event when installed配置 NuGet 包以在安装时添加生成事件
【发布时间】:2012-10-28 18:09:54
【问题描述】:

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

【问题讨论】:

    标签: nuget-package build-events


    【解决方案1】:

    我认为编辑用户的 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 并在卸载时将其删除。

    【讨论】:

    • 安装后没有看到添加到项目中的条目,但它们被调用了。好泰
    【解决方案2】:

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

    $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`"" }
    

    【讨论】:

    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多