Как удалить список файлов с помощью задачи MSBuild Delete без использования ItemsGroup - PullRequest
0 голосов
/ 06 июня 2019

Я знаю, список файлов можно удалить с помощью задачи MSBuild Delete с помощью <ItemsGroup>.Как уже упоминалось здесь .Однако есть ли способ сделать то же самое без использования.

В основном можно удалить задачу, сделать что-то похожее на <Exec Command="del /f /q *.pdp"/>

1 Ответ

2 голосов
/ 06 июня 2019

Кажется, что вы хотите, это что-то вроде:

<Target Name="TestDelete" AfterTargets="xxx">
    <Delete Files="$(Outputpath)*.pdb"/>
</Target>

Но, как я знаю, подстановочный знак не распознается в параметрах задачи msbuild .

Так что ответ отрицательный, я боюсь.Я рекомендую использовать подстановочные знаки в Items для ссылки на список файлов.

Проверьте MSBuild Items и MSBuild Tasks . В официальном документе четко указано, что только Itemsон поддерживает групповые символы.

Кроме того, вы можете проверить эту аналогичную проблему .

Обновление:

На самом деле не уверен, чтореальная причина конкретного дизайна.Я только что прочитал документ Task Writing .И напишите простое задание MyDelete для исследования.

public class MyDelete:Task
    {
        [Required]
        public string MyProperty { get; set; }

        public override bool Execute()
        {
            // Log a high-importance comment
            Log.LogMessage(MessageImportance.High,
                "MyDelete Task has delete files: \"" + MyProperty + "\".");
            return true;
        }
    }

Затем я добавляю следующий скрипт в файл проекта:

<UsingTask TaskName="MyMessage.MyDelete"
        AssemblyFile="MyDelete.dll"/>

  <Target Name="MyTarget" AfterTargets="build">
    <ItemGroup>
      <MyItem Include="$(Outputpath)*.*"/>
    </ItemGroup>
    <MyDelete MyProperty="$(Outputpath)*.*"/>
    <MyDelete MyProperty="@(MyItem)"/>
  </Target>

Вывод сборки должен выглядеть следующим образом: enter image description here

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

Но для Item, согласно документу: Типы элементов - это именованные списки элементов, которые могут использоваться в качестве параметров для задач.Таким образом, ввод - это строка типа «ххх; ххх; ххх ...», которая хорошо работает.

Мое обновление просто для глубокого исследования, трудно ответить на конкретную причину дизайна.Я думаю, что если вы хотите узнать причину дизайна, вам, возможно, придется обратиться за помощью к тому, кто поддерживает продукт, по этой ссылке .

...