我正在构建一个仅包含一组PowerShell脚本的NuGet包。所需的行为是将脚本放在项目和/或解决方案文件夹中,在卸载软件包时删除,并在更新软件包时更新。这些脚本只需要存在于文件夹中,然后复制到输出文件夹(它们是部署脚本)。
我在使用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>
谢谢, 埃里克
答案 0 :(得分:1)
正如您所注意到的,通过PackageReference
引用的NuGet包在安装时不再修改项目。使用此新功能的.NET Framework项目也是如此(它在VS 2017 15.2中针对非核心项目公开)。
content/someScript.ps1
文件仍然是与&#34; classic&#34;兼容的必要条件。基于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>