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

C# 如何获取MSBuild中所有引用DLL的路径?,c#,.net,msbuild,C#,.net,Msbuild,鉴于以下要求,我想获取.csproj中引用的所有程序集的路径: 包括程序集,无论它们是如何引用的(project、nuget、direct.dllimport) 不要触发构建 有一个关于如何为项目参考执行此操作的示例: <MSBuild Projects="@(ProjectReference)" Targets="GetTargetPath"> <Output TaskParameter="TargetOutputs" ItemName="MyReferencedAs

鉴于以下要求,我想获取
.csproj
中引用的所有程序集的路径:

  • 包括程序集,无论它们是如何引用的(project、nuget、direct
    .dll
    import)
  • 不要触发构建
有一个关于如何为项目参考执行此操作的示例:

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


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

由于您正在寻找输入,因此TargetOutput看起来不会提供您想要的路径

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

具体来看函数:

protected int GatherReferenceAssemblies()

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

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

具体来看函数:

protected int GatherReferenceAssemblies()

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

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


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

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

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


之后,
myReferencedAssemblys
项组包含所有引用DLL(完整路径,所有类型)的集合。它还适用于以新的
.csproj
格式导入的
PackageReference
。重要的一点是,
@(ReferencePath)
只有在
resolverences
完成后才是非空的。

谢谢您的提示。事实上,我可以使用MSBuild API,因为我将收集到的引用程序集传递到自定义的
任务中。我可以直接从那里使用API。无论如何,我的理由是:既然MSBuild必须知道这些引用才能构建项目,那么应该有一种方法来访问它,这似乎使这个。谢谢你的提示。事实上,我可以使用MSBuild API,因为我将收集到的引用程序集传递到自定义的
任务中。我可以直接从那里使用API。无论如何,我的理由是:既然MSBuild必须知道这些引用才能构建项目,那么应该有一种方法来访问它,这似乎使这一点得以实现。