как выполнить поиск в структуре каталогов и получить имя файла .sln с помощью MSBuild

#.net #c#-4.0 #msbuild #continuous-integration #msbuild-task

#.net #c #-4.0 #msbuild #непрерывная интеграция #msbuild-задача

Вопрос:

Я настраиваю среду сборки для нескольких проектов. Каждый проект имеет более одного решения. Мне нужно создать все решения, которые будут находиться в разных папках в корневом каталоге. Рычаг папки с файлами решения, находящимися в корневом каталоге, может отличаться. То есть файл решений может быть встроен в папку, которая, в свою очередь, может находиться в другой папке и так далее. Как я могу выполнить поиск в структуре корневых каталогов и получить список всех решений (.sln) имя файла и его путь с помощью MSBuild, чтобы я мог создавать эти решения?

Аналогично, мне пришлось бы искать и получать список всех dll и exe, сгенерированных из сборки, чтобы я мог выполнить для них статический анализ кода. Я ищу способ поиска и получения списка сборок и пути к их файлам.

Комментарии:

1. Возможно, стоит хранить все файлы решений в одной папке?

2. Если бы я создавал эти проекты, я бы демонстративно структурировал решения так, чтобы они находились в одной папке. К сожалению, у меня нет такой роскоши.

Ответ №1:

Это позволит найти и сообщить обо всех файлах решений под папкой файла, в который он помещен:

 <Target Name="FindSolutions">
   <ItemGroup>
      <SolutionFile Include="$(MSBuildThisFileDirectory)***.sln" />
   </ItemGroup>
   <Message Text="Found '%(SolutionFile.Identity)'" />
</Target>
  

Ключ — это тот ** , который рекурсивно соответствует всем папкам.

Комментарии:

1. Спасибо, мозг, я подумал, что ** будет сверлить в одной папке ниже корневого ie из примера about в папке ниже $(MSBuildThisFileDirectory) . Что делать, если файл решения похоронен в более глубоком, как …….sln или ….. фсл . Как мне справиться с этой ситуацией?