15

我正在尝试创建我的第一个 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 出现在包管理器控制台中。有什么问题?

4

3 回答 3

21

Install.ps\lib仅当and/or文件夹中有内容时才会调用\content,而不是“仅工具”包。见这里

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

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

于 2011-07-31T20:29:02.077 回答
7

Install.ps1(and Uninstall.ps1) 在 v3 中不再调用,但您可以使用Init.ps1. 见这里

Powershell 脚本支持已修改为不再执行安装和卸载脚本,但仍会执行初始化脚本。造成这种情况的一些原因是,当项目并非直接引用所有包时,无法确定需要运行哪些包脚本。

于 2016-12-02T12:14:36.013 回答
1

安装脚本的替代方案有时可以是包目标文件。此目标文件会自动编织到项目文件(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>
于 2020-10-23T08:13:20.383 回答