【问题标题】:NuGet - install.ps1 does not get calledNuGet - install.ps1 不会被调用
【发布时间】:2020-10-23 16:13:20
【问题描述】:

我正在尝试创建我的第一个 NuGet 包。我不知道为什么我的 install.ps1 脚本没有被调用。这是目录结构

--Package
|
 - MyPackage.nuspec
 - tools
 |
  - Install.ps1
  - some_xml_file

我使用这个命令行构建包 nuget.exe pack MyPackage.nuspec

当我从 VS 包管理器控制台安装包时 install.ps1 不会被调用。

我认为可能是我在脚本中有一些错误,这就是原因,所以我将所有内容都注释掉了,但

param($installPath, $toolsPath, $package, $project)
"ECHO"

但我没有看到 ECHO 出现在包管理器控制台中。有什么问题?

【问题讨论】:

    标签: nuget nuget-package


    【解决方案1】:

    Install.ps 只有在\lib 和/或\content 文件夹中有内容时才会被调用,而不是“仅限工具”包。见here

    软件包的内容或 lib 文件夹中必须有文件才能运行 Install.ps1。仅仅在工具文件夹中有一些东西不会启动它。

    请改用Init.ps1(但是,每次打开解决方案时都会执行此操作)。

    【讨论】:

    • 谢谢 我没有在帮助页面上注意到它。我将 Install.ps1 更改为 Init.ps1 并且它可以工作。但我仍然看不到 ECHO。虽然我看到 'Successfully installed packageName'
    • 安装软件包后重新打开您的解决方案。但是,请确保 Package Manager Console 已经可见。然后,您应该会看到 Init.ps1 脚本的任何输出。
    • 是的,我在 VS 开始时看到了输出。但不在安装包上。这正常吗?
    • 是的,我相信是的。至少这就是我在尝试类似的事情时所做的。感觉像一个错误,虽然......
    • 也许你也知道为什么 Uninstall.ps1 没有被调用?我在 Powershell ISE 下验证它可以工作(删除安装期间创建的文件夹)。
    【解决方案2】:

    Install.ps1(和Uninstall.ps1)在 v3 中不再调用,但您可以使用Init.ps1。见here

    Powershell 脚本支持已修改为不再执行安装 并卸载脚本,但仍会执行初始化脚本。一些 原因是无法确定哪个包 当并非所有包都被直接引用时需要运行脚本 通过一个项目。

    【讨论】:

    • 安装和卸载脚本的替代方法是什么?
    【解决方案3】:

    安装脚本的替代方案有时可以是包目标文件。此目标文件会自动编织到项目文件(csproj,...)中并通过构建调用。

    为了让 Nuget 找到这个目标文件并将其编入其中,这两件事是强制性的:

    • 目标文件的名称必须是<package-name>.targets
    • 必须保存在包顶层文件夹build

    如果您想将某些内容复制到输出文件夹(例如,一些额外的二进制文件,如本机 DLL),您可以将这些二进制文件放入文件夹 binaries 下的包中,并在目标文件中使用此片段进行复制:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <Target Name="CopyBinaries" BeforeTargets="BeforeBuild">
            <CreateItem Include="$(MSBuildThisFileDirectory)..\binaries\**\*.*">
                <Output TaskParameter="Include" ItemName="PackageBinaries" /> 
            </CreateItem>
    
            <Copy SourceFiles="@(PackageBinaries)"
                  DestinationFolder="$(OutputPath)\%(RecursiveDir)"
                  SkipUnchangedFiles="true"
                  OverwriteReadOnlyFiles="true"
            />
        </Target>
    </Project>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2020-01-26
      • 2020-07-02
      • 1970-01-01
      相关资源
      最近更新 更多