Nuget 可以在安装过程中创建文件夹结构或将文件放在特定的输出目录中吗?

Can Nuget create folder structure or place files in specific output directory during install?

我是 Nuget 包开发的新手,我已经成功创建了一些将文件放置在项目根级别的简单包。但是,这些包开箱即用。我需要将文件放在目标项目中的特定文件夹中。请参阅下面的示例...

LoginController.cs 将被放置到客户端 mvc 项目中的 "Controllers" 文件夹中。 Login.cshtml 将被放置在客户端 mvc 项目中的 "Views/Login" 文件夹中。

有没有办法实现这个特定的输出?任何时候我安装一个 javascript 库,它总是默认到 "Scripts" 文件夹,所以要么是在 Nuget 运行时内置的,要么是包的发布者告诉它使用那个位置。

NuGet 为您提供了三个挂钩来编写 PowerShell 脚本并将它们包含在您的包中。

  • Init.ps1 - 当软件包首次安装在解决方案级别时运行
  • Install.ps1 - 它在项目级别安装时运行
  • Uninstall.ps1 - 卸载包时运行

请务必注意,Visual Studio 2017 不再支持 Install.ps1Uninstall.ps1

要添加这些文件,您只需像这样更新您的 NuSpec 文件:

<?xml version="1.0"?>
<package >
  <metadata>...</metadata>
  <files>
    <file src="scripts\NugetScripts\Init.ps1" target="tools\Init.ps1" />
  </files>
</package>

您的 PowerShell 文件将需要以下参数声明:

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

从那里,您将能够根据自己的喜好修改项目和 add/edit 文件。这里有一个 blog post 提供了额外的细节,但是如果你 Google 周围有更多的例子在网络上。这只是取决于你想在脚本中做什么样的事情。