Может ли MsBuild выводить информацию о зависимостях, аналогичную makedepend? - PullRequest
1 голос
/ 22 октября 2011

Есть ли способ заставить MsBuild выводить информацию о целевой зависимости в структурированной форме, аналогичной makedepend ?Мне нужно это на уровне решения для решения, содержащего проекты C # и C ++.Я не придирчив к формату вывода.

Я считал, что зависимости C # можно определить, обработав файлы .csproj и создав группу DAG.Точно так же я мог запустить открытый исходный код makedepend на источниках C ++ и перейти оттуда.Я действительно стараюсь не накатывать свои собственные здесь - это похоже на то, что MsBuild должна уметь просто делать, даже если для целей диагностики.

1 Ответ

1 голос
/ 25 октября 2011

Я решил это без особого бритья яка. Очевидно, что MsBuild имеет информацию о зависимостях во время сборки, поэтому мой подход заключается в том, чтобы обернуть сборку пользовательской целью, которая записывает зависимость в файл .depends:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- Write project dependencies to a .depends file, one line per dependency -->
  <Target Name="OutputProjectDependencies">
    <Delete Files="$(OutputPath)\$(TargetFileName).depends"/>
    <WriteLinesToFile File="$(OutputPath)\$(TargetFileName).depends" 
      Lines="@(CscDependencies->'%(FullPath)');@(ReferencePath->'%(FullPath)');@(Content->'%(FullPath)');@(_NoneWithTargetPath->'%(FullPath)')"
      Overwrite="false"
      Encoding="UTF-8"/>
    <WriteLinesToFile File="$(OutputPath)\$(TargetFileName).depends" 
      Lines="@(ClDependencies->'%(FullPath)')"
      Overwrite="false"
      Encoding="UTF-8"/>
  </Target>

  <ItemGroup>
    <CscDependencies Include="@(Compile);@(EmbeddedResource)"/>
    <ClDependencies Include="@(ClCompile);@(ClInclude)"/>
  </ItemGroup>

  <PropertyGroup>
    <BuildDependsOn>
      $(BuildDependsOn);
      OutputProjectDependencies;
    </BuildDependsOn>
  </PropertyGroup>

</Project>

Это не так надежно, как хотелось бы для проектов C ++ (в нем отсутствуют включенные зависимости от заголовка и библиотеки ссылок), но, вероятно, его можно было бы улучшить. Я считаю, что это очень надежный подход для C # - он включает сборки, на которые есть ссылки, встроенные ресурсы и контент.

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