gpt4 book ai didi

powershell - 为 nuget 创建自定义 powershell 脚本,将自定义目标添加到 csproj BeforeBuild 步骤

转载 作者:行者123 更新时间:2023-12-03 00:01:42 26 4
gpt4 key购买 nike

我想创建一个 nuget 包,该包使用我创建的自定义 MSBuild 任务将 BeforeBuild 步骤添加到我的 csproj 中。理想情况下,我想要:

  1. 将新目标添加到 csproj 文件 (MyCustomBeforeBuildTarget)
  2. 添加 BeforeBuild 目标(如果尚不存在)
  3. 编辑 BeforeBuild DependsOnTargets 属性以包含我的自定义目标

所以安装后我的 csproj 应该包含以下内容:

<Target Name="MyCustomBeforeBuildTarget" Condition="SomeCondition">
<MyCustomTask />
</Target>
<Target Name="BeforeBuild" DependsOnTargets="MyCustomBeforeBuildTarget">

</Target>

此外,如果我的包被删除,自定义目标也会消失,那就太好了,尽管我添加了一个条件,如果我的自定义任务 DLL 不存在,则应使其忽略目标。

我可以编写的用于添加自定义目标的最简单的 Powershell nuget 安装脚本是什么?我有一种感觉,PowerShell 脚本 here可能构成解决方案的一部分,但我没有足够的 PowerShell 经验来了解如何实际使用它们来编辑 csproj。

最佳答案

NuGetPowerTools是一个添加了一些 PowerShell 功能的包,可以更轻松地处理要添加包的项目的项目设置。要使用可用的功能,您只需使您的包依赖于 NuGetPowerTools,使用包 nuspec 文件中的依赖项标记,如下所示:

<dependencies>
<dependency id="NuGetPowerTools" version="0.26" />
</dependencies>

这将使获取对项目的构建项目表示的引用成为可能。

然后,您需要将 install.ps1 文件放入 NuGet 软件包的 tools 文件夹中,此 PowerShell 文件将在您安装软件包时运行,之后不再运行安装。

该文件应如下所示:

#First some common params, delivered by the nuget package installer
param($installPath, $toolsPath, $package, $project)

# Grab a reference to the buildproject using a function from NuGetPowerTools
$buildProject = Get-MSBuildProject

# Add a target to your build project
$target = $buildProject.Xml.AddTarget("PublishWebsite")

# Make this target run before build
# You don't need to call your target from the beforebuild target,
# just state it using the BeforeTargets attribute
$target.BeforeTargets = "BeforeBuild"

# Add your task to the newly created target
$target.AddTask("MyCustomTask")

# Save the buildproject
$buildProject.Save()

# Save the project from the params
$project.Save()

应该是这样。

问候

杰斯珀·豪格

关于powershell - 为 nuget 创建自定义 powershell 脚本,将自定义目标添加到 csproj BeforeBuild 步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com