【问题标题】:In a nuget init.ps1 how do you detect if running as install or as console initialization在 nuget init.ps1 中,您如何检测是作为安装运行还是作为控制台初始化运行
【发布时间】:2018-11-14 01:44:35
【问题描述】:

所以 init.ps1 https://docs.nuget.org/create/creating-and-publishing-a-package#automatically-running-powershell-scripts-during-package-installation-and-removal 在两种情况下运行。当您第一次安装软件包以及在打开解决方案的过程中打开 nuget powershell 控制台时。

第一次在解决方案中安装软件包时运行 Init.ps1.... 该脚本也会在每次打开解决方案时运行

那么在 Init.ps1 中如何确定它在哪个上下文中运行?

【问题讨论】:

  • 我猜想设置一个环境变量,PowerShell 脚本将读取以确定使用哪个上下文。没有例子,这真的是任何人的猜测。
  • @user4317867 “没有例子,这真的是任何人的猜测”我不明白这个?
  • @user4317867 " 设置 PowerShell 脚本将读取的环境变量以确定要使用的上下文" 如何使用相同的脚本在两个上下文中运行我将在哪里设置变量?
  • init.ps1 的第一行是param($installPath, $toolsPath, $package),意思是当init.ps1 被调用时,你通过init.ps1 -installPath <YourAnswer> -TOOLSPath <YourAnswer2> 传递参数等等。因此,当您调用 init.ps1 时,您会将所需的参数传递给它。详情见here
  • @user4317867 我不调用那个方法。它是从 nuget 调用的。我无法传递自定义参数。从你给出的链接“这些是 NuGet 将传递给 init.ps1 脚本的参数”

标签: powershell nuget


【解决方案1】:

没有内置的方法——Init.ps1 是在每次初始化包管理器控制台时调用的,所以故意没有上下文参数。正如 Yishai Galatzer 毫不含糊地说的那样on GitHub

这不是 init.ps1 的意图,我们不会启用它。 NuGet 不是 Visual Studio 的自动化入口点,请不要这样使用它。

我确实觉得这有点不幸,因为在 2015 年对 Install.ps1Uninstall.ps1 的支持是 removed in NuGet 3,这意味着我们无法在安装后运行自定义代码,甚至是显示 HTML 自述文件等简单的东西。推理是有道理的,但如果有专门在 Visual Studio 中安装包的替代方案,那就太好了。

【讨论】:

    【解决方案2】:

    这是一个老问题,但也许它可以帮助某人。要在包安装期间运行脚本而不是控制台初始化,请将您的代码放在 install.ps1 文件中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2012-03-29
    相关资源
    最近更新 更多