使用 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。
我正在构建一个仅包含一组 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。