NuGet - 不会调用install.ps1

时间:2011-07-31 20:14:04

标签: nuget nuget-package

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

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

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

当我从VS Package Manager控制台安装包时,不会调用install.ps1。

我想也许我在剧本中遇到了一些错误,这就是我之所以注释掉所有内容的原因

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

但我没有看到ECHO出现在Package Manager Console中。什么可能是错的?

3 个答案:

答案 0 :(得分:15)

只有在Install.ps和/或\lib文件夹中存在某些内容时才会调用

\content,而不是“仅限工具”包。见here

  

软件包必须在content或lib文件夹中包含要运行Install.ps1的文件。只是在tools文件夹中有一些东西不会启动它。

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

答案 1 :(得分:5)

在v3中不再调用

Install.ps1(和Uninstall.ps1),但您可以使用Init.ps1。见here

  

修改了Powershell脚本支持,不再执行安装   并卸载脚本,但仍然执行init脚本。一些   这样做的原因是无法确定哪个包装   当没有直接引用所有包时,需要运行脚本   通过一个项目。

答案 2 :(得分:0)

安装脚本的替代方法有时可以是软件包目标文件。该目标文件会自动编织到项目文件(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>