使用 NuGet 在项目文件夹中放置和更新 PowerShell 文件的选项

Options for placing and updating PowerShell files in Project folder using NuGet

我正在构建一个仅包含一组 PowerShell 脚本的 NuGet 包。所需的行为是将脚本放置在项目 and/or 解决方案文件夹中,在卸载包时将其删除,并在更新包时进行更新。这些脚本只需要存在于文件夹中,并复制到输出文件夹(它们是部署脚本)。

我在 nuspec 中使用内容目标之前已经这样做了,但这在 netstandard/.NET Core 应用程序(即任何使用 PackageReference 的应用程序)中不起作用。 NuGet 文档提到了元数据元素下的 contentFiles 元素,但这也不适用于 PackageReference。我唯一能够开始工作的就是复制 tools/init.ps1 中的 PowerShell 脚本。我有一些部分工作,但它不处理卸载或升级路径。而且 DTE 从来都不好玩。

有没有办法在 netstandard 中使用内容文件?

如果没有,是否存在如何正确管理 NuGet 生命周期(复制文件、更新文件、删除文件)的示例或示例?

编辑:这是一个控制台应用程序,但它也应该在 asp.net 应用程序中工作。

EDIT2:这是我尝试通过 contentFiles 元素执行操作的 nuspec。当我安装包时,我在项目或解决方案中看不到任何东西。

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>Test</id>
        <version>1.0.0</version>
        <contentFiles>
            <files include="Build.ps1" buildAction="Content" copyToOutput="true" />
        </contentFiles>
    </metadata>
    <files>
        <file src="Build.ps1" target="content" />
    </files>
</package>

谢谢, 埃里克

如您所见,通过 PackageReference 引用的 NuGet 包在安装时不再修改项目。使用此新功能的 .NET Framework 项目也是如此(它是为 VS 2017 15.2 中的非核心项目制作的 public)。

为了与基于 "classic" packages.config 的项目兼容,content/someScript.ps1 文件仍然是必需的,但是 PackageReference 项目的新功能是 contentFiles

使用 nuspec 文件手动打包时,可以通过添加 contentFiles 部分来复制构建时的文件:

<package>
  <metadata>
    ...
    <contentFiles>
        <files include="**/*.ps1" buildAction="Content" copyToOutput="true" />
    </contentFiles>
  </metadata>
  <files>
    <file src="Build.ps1" target="content" />
    <file src="Build.ps1" target="contentFiles/any/any" />
  </files>
</package>

参见documentation on contentFiles for more details my example on GitHub