我正在构建一个仅包含一组PowerShell脚本的NuGet软件包。期望的行为是将脚本放置在项目和/或解决方案文件夹中,在卸载程序包时将其删除,并在更新程序包时对其进行更新。这些脚本仅需要驻留在文件夹中,然后复制到输出文件夹(它们是部署脚本)。
我已经在nuspec中使用内容目标之前完成了此操作,但这在netstandard / .NET Core应用程序(即使用PackageReference的任何程序)中不起作用。 NuGet文档在metadata元素下提到了contentFiles元素,但它也不适用于PackageReference。我唯一能够开始工作的是将PowerShell脚本复制到tools / init.ps1中。我有部分工作,但无法处理卸载或升级路径。 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中已公开用于非核心项目)。
为了与基于“经典” content/someScript.ps1
的项目兼容,仍然需要packages.config
文件,但是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
。
关于powershell - 使用NuGet在Project文件夹中放置和更新PowerShell文件的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578182/