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
import).dll
- 不要触发构建
<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必须知道这些引用才能构建项目,那么应该有一种方法来访问它,这似乎使这一点得以实现。