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

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

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

相关文章:

PowerShell:没有标题的格式表

c# - "System.Tuple defined multiple times issue"怎么解决?

.net - 该类型存在于两个 DLL 中

NuGet 包失败,出现 "Unable to find ' @(_OutputPathItem->'%(FullPath)..."

c# - OpenIddict 问题

c# - JWT 承载身份验证不从 header 读取 token

powershell - Azure DNS 中的通配符和裸 CNAME 记录

powershell - 如何使用powershell调用SHGetKnownFolderPath?

c# - 需要帮助将 winform 迁移到 net 5

sql-server-2005 - 在 2005 SQL Server 中从 SQL 代理作业运行脚本时,Powershell 脚本为空