安装时读取目标程序集中的 nuget 包库版本

Read a nuget package library version in the target assembly when installed

如何在目标程序集中查找安装包库版本?

假设:

我们有 NugetLibConsumerApp(这将安装 NugetLib)。

我在 .targets 文件中使用 NugetLib 命名相同的文件,安装后它会 运行 在目标上.

在 NugetLib.targets 文件中:

  <Target Name="Main" AfterTargets="Build">
    <Message Text="$(NugetLibVersion)" Importance="high" />
  </Target>

目前我没有 NugetLibVersion 的正确值,需要以某种方式设置它。

使用 $(PackageVersion)" 没有帮助,因为它不读取和提供 NugetLib 版本,它将提供 ConsumerApp 版本(目标程序集,它将始终是1.0.0.0).

如果您知道实现此目的的方法,包括设置一些特殊属性,甚至通过使用文本文件,或任何其他自己的或棘手的方法,我们都欢迎和赞赏。

如果您的项目是新的 sdk 样式格式,您只需添加此自定义目标即可获取 nuget 版本:

  <Target Name="PrintPackageReferences" AfterTargets="Build">
    
    <Message Text="Dependencies:%0A  @(PackageReference->'%(Identity), Version: %(Version)', '%0A    ')" Importance="High" />

    <CreateProperty Condition="'%(PackageReference.Identity)'=='NugetLib'" Value="%(PackageReference.Version)">
     <Output TaskParameter="Value" PropertyName="NugetLibVersion" />
    </CreateProperty>

    <Message Importance="high" Text="$(NugetLibVersion)"></Message>
    
    </Target>