如何获取 MSBuild 中所有引用 DLL 的路径?

pba*_*aga 1 .net c# msbuild

我想获取在.csproj给定以下要求中引用的所有程序集的路径:

  • 包括程序集,无论它们如何被引用(项目、nuget、直接.dll导入)
  • 不触发构建

关于如何为项目参考做这件事有一个很好的答案

<MSBuild Projects="@(ProjectReference)" Targets="GetTargetPath">
  <Output TaskParameter="TargetOutputs" ItemName="MyReferencedAssemblies" />
</MSBuild>
Run Code Online (Sandbox Code Playgroud)

有没有类似的方法来获取.dll所有其他类型引用的路径?

pba*_*aga 5

似乎有一种干净的方法可以做到:

  <Target Name="GatherReferences" DependsOnTargets="ResolveReferences">
    <ItemGroup>
      <MyReferencedAssemblies Include="@(ReferencePath)" />
    </ItemGroup>
  </Target>
Run Code Online (Sandbox Code Playgroud)

在该MyReferencedAssemblies项目组之后包含所有引用的 DLL(完整路径,所有类型)的集合。它也适用PackageReference于新.csproj格式的导入。重要的部分是@(ReferencePath)只有在ResolveReferences完成后才非空。