首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PackageReference解析版本逻辑为API

PackageReference解析版本逻辑为API
EN

Stack Overflow用户
提问于 2018-08-08 17:47:02
回答 1查看 171关注 0票数 1

是否有任何通过MSBuild任务、目标或其他方式访问的API,允许我查询给定PackageReference将解析(或已经解决)到哪个版本的NuGet包?

例如,如果我有一个csproj

代码语言:javascript
复制
<PackageReference Include=“MyPkg” Version=“1.*”/>

我有一个定制的目标

代码语言:javascript
复制
<MyTarget>
  <GetVersionOfResolvedPackageReference Name=“MyPkg” OutputProperty=“IWantToKnowThis” /> <!— or something —>
  ...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-12 16:03:29

来自NuGet如何解决包依赖关系

当NuGet还原过程在构建之前运行时,它首先解决内存中的依赖关系,然后将生成的图形写入使用PackageReference的项目的obj文件夹中名为project.assets.json的文件中。然后,MSBuild读取该文件并将其转换为一组文件夹,在其中可以找到潜在的引用,然后将它们添加到内存中的项目树中。

代码语言:javascript
复制
<#
.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文件中写入结果。您可以通过MSBuild任务调用执委会脚本,然后通过ReadLinesFromFile读取文件并执行进一步的处理。

备注:表示的脚本将为多个项目生成PackageReference行的副本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51752735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档