是否有任何可通过MSBuild任务,目标或其他方式访问的API,可以让我查询给定PackageReference将解析(或已经解析)的NuGet软件包版本?
例如,如果我有一个csproj与
<PackageReference Include=“MyPkg” Version=“1.*”/>
我有一个想要的自定义目标
<MyTarget>
<GetVersionOfResolvedPackageReference Name=“MyPkg” OutputProperty=“IWantToKnowThis” /> <!— or something —>
...
答案 0 :(得分:1)
来自How NuGet resolves package dependencies:
在构建之前运行NuGet还原过程时,它可以解决 依赖关系首先在内存中,然后将结果图写入 使用以下命令在项目的obj文件夹中名为project.assets.json的文件 PackageReference。 MSBuild然后读取此文件并将其转换为 一组可以找到潜在参考的文件夹,然后 将它们添加到内存中的项目树中。
<#
.Synopsis
Represents the method that
returns the project.assets
content as object.
#>
function Get-ProjectAssest([System.String]$Assest) {
return (Get-Content $Assest | ConvertTo-Json | ConvertFrom-Json).value |
ConvertFrom-Json
}
Get-ChildItem -Path . 'project.assets.json' -Recurse | ForEach-Object { Get-ProjectAssest($_.FullName) } | ForEach-Object {
# K = Package Identity
# V = Package Version
$_.libraries | ForEach-Object { $_.PSObject.Properties.Name } | Out-File 'PackageReference.ini' -Append
}
此PowerShell
脚本递归解析目录以找到project.assets.json
并将结果写入PackageReference.ini
文件中。您可以通过Exec任务从MSBuild调用脚本,然后通过ReadLinesFromFile读取文件并执行进一步的处理。
注意:代表的脚本将为多个项目生成
PackageReference
行的重复项。