Загрузка проекта .NET с элементами, включенными в качестве символов подстановки - PullRequest
0 голосов
/ 10 января 2019

Я понял, что в моем коде C # / F # я могу загрузить информацию о любом проекте .NET, используя

collection.LoadProject(path_to_my_proj_file)

, где collection имеет тип ProjectCollection. Затем я могу получить доступ ко всем свойствам и элементам, определенным в проекте, и всем его зависимостям. В качестве примера я могу получить доступ ко всем файлам, включенным через Compile следующим образом

project.GetItems "Compile"

Давайте предположим, что я хочу определить пользовательскую ItemGroup в моем файле fsproj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 ...
  <ItemGroup>
    <MyGroup Include="Test.txt" />
    <MyGroup Include="TestFiles\**\*" />
  </ItemGroup>
</Project>

Некоторые комментарии:

  • MyGroup - мой пользовательский идентификатор коллекции. Я узнал, что такие вещи разрешены
  • Папка «TestFiles» содержит все 4 файла, которые существуют в некоторых подпапках, но все они соответствуют шаблону «TestFiles \ ** \ *»

Когда я загружаю проект, используя метод, который я упоминал в начале, и запускаю

project.GetItems "MyGroup"

Я получаю только один предмет - «Test.txt». Другие файлы не обнаруживаются, если я не определю их явно (т.е. без подстановочного знака) в fsproj.

Можно ли мне найти файлы, включенные с использованием символов подстановки? Я даже счастлив получить их в неразрешенной форме. Так что получать «TestFiles \ ** \ *» вместо определенных файлов, которые соответствуют шаблону, тоже хорошо.

1 Ответ

0 голосов
/ 11 января 2019

Нашли решение.

Во-первых, позвольте мне сказать, что проблема была на моей стороне. На самом деле, в общем случае, когда вы пытаетесь загрузить проект, он загружает также все файлы. Даже те, которые определены с подстановочными знаками, если они соответствуют шаблону.

И вот в чем дело: в моем приложении я не использую простую collection.LoadProject, а скорее более сложную библиотеку. И да - библиотека делает некоторые магические вещи, которые вызвали проблему.

В этой ситуации проблема была проста: все файлы *. [Cs | fs] proj были скопированы в C:\temp\<random_folder_name>. Только *. [Cs | fs] proj файлы - ни меньше, ни больше. В результате, когда загрузчик проекта попытался оценить решение, просто не было файлов для сопоставления с шаблоном, что привело к нулю элементов.

Урок здесь такой: написание правильного MCVE важно - сэкономит мне (и, вероятно, вам тоже) некоторое время. Извиняюсь за проблемы, ребята!

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