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

时间:2018-05-29 20:50:40

标签: c# .net msbuild

我想获得.csproj中引用的所有程序集的路径,并给出以下要求:

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

关于如何为项目引用执行此操作有good answer

<MSBuild Projects="@(ProjectReference)" Targets="GetTargetPath">
  <Output TaskParameter="TargetOutputs" ItemName="MyReferencedAssemblies" />
</MSBuild>

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

2 个答案:

答案 0 :(得分:3)

似乎有一种干净的方法:

  <Target Name="GatherReferences" DependsOnTargets="ResolveReferences">
    <ItemGroup>
      <MyReferencedAssemblies Include="@(ReferencePath)" />
    </ItemGroup>
  </Target>

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

答案 1 :(得分:1)

看起来TargetOutput会给你想要的东西,因为你正在寻找输入。

如果您使用MSBuild API(使用c#),这应该是一件小事。你可以看到我如何扩展Project类以包含这样的东西:

https://github.com/chris1248/SolutionBuilder/blob/master/MSBuildTools/ProjectBase.cs

具体看看功能:

protected int GatherReferenceAssemblies()