如何获取在nuget pack期间更改为包引用的项目引用列表?

问题描述

我有一个包含两个项目的解决方案,这两个项目都配置为构建 NuGet 包:

Solution
+--Directory.Build.props
+--Project A
+--Project B

我使用 Directory.Build.props 文件来存储通用版本信息,因此两个 NuGet 包共享相同的版本号。项目 B 引用项目 A,在构建解决方案时,项目引用将替换为正确的 Nuget 包引用(如 this answer 中所述)。

但是,项目 B 包含 T4 模板 .ttinclude 文件,并且在构建过程中,自定义目标运行生成 .ttinclude 文件获取包含对依赖 Nuget 包的引用(如{{ 3}})。目标文件如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="GenerateT4AssemblyReferences" BeforeTargets="Build;TransformOnBuild">

    <!-- Look for files to generate -->
    <ItemGroup>
      <T4AssemblyReferences Include="**\AssemblyReferences.ttinclude"/>
    </ItemGroup>

    <Error Condition="'@(T4AssemblyReferences->Count())' == 0" Text="No AssemblyReferences.ttinclude file(s) found" />

    <!-- Write a comment line -->
    <WriteLinesToFile File="@(T4AssemblyReferences)"
      Lines="&lt;# /* This file gets autogenerated based on the nuget package and project dependencies */ #&gt;"
      Overwrite="true"
      Encoding="Unicode" />

    <!-- Output references if $(T4IncludeSelf) == 'true' -->
    <WriteLinesToFile File="@(T4AssemblyReferences)"
      Lines="&lt;#@ assembly name=&quot;%24(NuGetPackageRoot)$(PackageId)\$(Version)\lib\$(TargetFramework)\$(TargetFileName)&quot; #&gt;"
      Overwrite="false"
      Encoding="Unicode"
      Condition="$(T4IncludeSelf) == 'true'"/>

    <!-- Output nuget package references with a HintPath -->
    <WriteLinesToFile File="@(T4AssemblyReferences)"
      Lines="&lt;#@ assembly name=&quot;%24(NuGetPackageRoot)$([MsBuild]::MakeRelative($(NuGetPackageRoot),%(Reference.HintPath)))&quot; #&gt;"
      Overwrite="false"
      Encoding="Unicode"
      Condition="'%(Reference.HintPath)' != '' And 
                $([System.String]::Copy('%(Reference.HintPath)').StartsWith('$(NuGetPackageRoot)')) And 
                !$([System.String]::Copy('%(Reference.HintPath)').Contains('microsoft.visualstudio.texttemplating'))"/>

    <Message Text="Generating %(T4AssemblyReferences.FullPath)" Importance="high" />
  </Target>
</Project>

我需要修改这个目标以获取转换后的项目引用(以便我可以正确引用构建的 NuGet 包的位置。我猜我需要以某种方式挂钩到 MsBuild.Nuget.Pack目标,但我不确定如何做到这一点,而且文档极其稀少。

一种可能的替代方法是以某种方式确定哪些项目引用包含我可以在构建过程中读取的包属性。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)