C# 在NuGet安装后运行PowerShell脚本

C# 在NuGet安装后运行PowerShell脚本,c#,powershell,nuget,csproj,C#,Powershell,Nuget,Csproj,我正试图通过PowerShell编辑csproj中当前正在安装的NuGet软件包库的XML节点,以添加条件=“…”属性 在安装包期间,我可以调用我的PowerShell Install.ps1脚本,但此时不存在节点 如果我手动将所需的Condition=“…”属性添加到csproj,则在更新NuGet包时会将其删除 是否有一种方法可以在NuGet添加已安装库的节点后自动运行PowerShell脚本?或者在安装包时以某种方式修改NuGet添加的节点?一个选项是默认情况下不让NuGet添加引用。删除

我正试图通过PowerShell编辑csproj中当前正在安装的NuGet软件包库的
XML节点,以添加
条件=“…”
属性

在安装包期间,我可以调用我的PowerShell Install.ps1脚本,但此时不存在
节点

如果我手动将所需的
Condition=“…”
属性添加到csproj,则在更新NuGet包时会将其删除


是否有一种方法可以在NuGet添加已安装库的
节点后自动运行PowerShell脚本?或者在安装包时以某种方式修改NuGet添加的节点?

一个选项是默认情况下不让NuGet添加引用。删除lib文件夹并将程序集放在包的其他位置(参考?)。创建一个{NuGetPkgName}.targets文件并将其放在packages build文件夹中。该目标文件将被“导入”到您添加NuGet pkg的任何项目中。然后,在目标文件中,您可以使用所需的条件属性向程序集添加引用。

我没有时间实现Keith Hill的解决方案,只能通过批处理文件手动调用我的脚本。下面是PowerShell脚本,以防它对某人有所帮助

目标是从以MyProjectName开头的所有项目中排除调试时对MyPackageName的引用

# Get a list of matching csproj files recursively
$csprojs = gci $PSScriptRoot -rec -include MyProjectName.*.csproj

# The value of the condition attribute we want to set
$condition = @'
'$(Configuration)' != 'Debug'
'@

foreach ($csproj in $csprojs)
{
    [xml]$xml = Get-Content $csproj;
    foreach ($reference in $xml.Project.ItemGroup.Reference | ? { $_.Include -match '^MyPackageName' })
    {
        $reference.SetAttribute('Condition', $condition);
    }

    $xml.Save($csproj);
}

NuGet将在未来版本中停止支持PowerShell。