我正在尝试通过PowerShell编辑csproj中当前安装的NuGet包库的<Reference>
XML节点,以添加Condition="..."
属性。
我可以在软件包的安装过程中调用我的PowerShell Install.ps1脚本,但此时<Reference>
节点不存在。
如果我手动将所需的Condition="..."
属性添加到csproj,则在更新NuGet包时会删除它。
在 NuGet添加已安装库的<Reference>
节点之后,有没有办法自动运行PowerShell脚本?或者以某种方式修改NuGet在安装软件包时添加的节点?
答案 0 :(得分:1)
一个选项是默认情况下不让NuGet添加引用。删除您的lib文件夹并将程序集放在包中的其他位置(参考?)。创建一个{NuGetPkgName} .targets文件并将其放在packages build文件夹中。该目标文件将被“导入”到您添加NuGet pkg的任何项目中。然后在目标文件中,您可以使用所需的条件属性添加对程序集的引用。
答案 1 :(得分:0)
我没有时间实施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);
}