添加构建后事件而不覆盖现有事件

2023-12-03

我有一个 Powershell 脚本(由我的 NuGet 包运行),它将生成后事件添加到用户的 Visual Studio 项目中。

$project.Properties | where { $_.Name -eq "PostBuildEvent" } | foreach { $_.Value = "xcopy `"`$(ProjectDir)MyFolder`" `"`$(OutDir)`"" }

不幸的是目前覆盖现有的构建后事件。 如何将 Powershell 脚本修改为append我的构建事件如果尚不存在?

我以前从未使用过 Powershell,但我尝试简单地将其附加到 foreach 内,但这不起作用:

$_.Value = "$_.Value`nxcopy `"`$(ProjectDir)MyFolder`" `"`$(OutDir)`""

只是给出:

System.__ComObject.Value xcopy "$(ProjectDir)MyFolder" "$(OutDir)"


我认为编辑 PostBuildEvent 属性是将构建后操作添加到用户项目的错误方法。我相信推荐的方法是将自定义操作放入目标中,然后将其导入到项目文件中。作为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">
    <ItemGroup>
        <MySourceFiles Include="$(ProjectDir)MyFolder\**" />
    </ItemGroup>
    <Target Name="MyNuGetCustomTarget" AfterTargets="Build">
        <Copy SourceFiles="@(MySourceFiles)" DestinationFolder="$(OutDir)" />
    </Target>
</Project>

这将创建一个配置为在标准构建目标之后运行的自定义目标。它将复制一些文件到输出目录。

您无需在 install.ps1 中执行任何其他操作。当用户安装您的包时,NuGet 将自动将导入添加到用户的 proj 文件中,并且您的目标将在构建目标运行后运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加构建后事件而不覆盖现有事件 的相关文章

随机推荐