Как получить пути ко всем ссылочным DLL в MSBuild? - PullRequest
0 голосов
/ 29 мая 2018

Я хотел бы получить пути ко всем сборкам, на которые есть ссылка в .csproj, с учетом следующих требований:

  • включает сборки, независимо от того, как на них ссылались (project, nuget, direct .dll import)
  • не запускать сборку

Существует хороший ответ о том, как это сделать для ссылок на проекты:

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

Есть ли аналогичный способ получения .dll путей для всех других типов ссылок?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Кажется, что есть простой способ сделать это:

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

После этого группа элементов MyReferencedAssemblies содержит коллекцию всех ссылочных библиотек DLL (полные пути, все виды).Он также работает для PackageReference импорта в новом формате .csproj.Важным моментом является то, что @(ReferencePath) не пусто только после завершения ResolveReferences.

0 голосов
/ 30 мая 2018

Это не похоже на то, что TargetOutput даст вам желаемое, поскольку вы ищете входы.

Это должно быть тривиальным вопросом, если вы используете MSBuild API (используя c #).Вы можете увидеть, как я расширил класс Project, добавив в него только такую ​​вещь:

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

, в частности, рассмотрим функцию:

protected int GatherReferenceAssemblies()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...