使用NuGet

时间:2017-08-08 21:18:54

标签: powershell nuget .net-core .net-standard nuspec

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

谢谢, 埃里克

1 个答案:

答案 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>

有关详情documentation on contentFiles,请参阅my example on GitHub