Как использовать ILMerge со сценариями сборки TFS?

Я хочу использовать ILMerge для объединения нескольких DLL-файлов как часть определения / сценария сборки. Как мне это сделать с TFS 2015?

1 ответ

Решение

Есть несколько способов сделать это. Вот один из способов, который мне показался простым и чистым. Я расскажу только о том, как добавить процесс ILMerge в существующее определение сборки, которое уже успешно создает и публикует ваши артефакты сборки. Я также расскажу о том, как работает ILMerge и где его взять.

Откройте определение сборки для редактирования;

  • В Visual Studio 2015 на панели Team Explorer перейдите к кнопке "Домой".
  • Нажмите "Builds" в разделе "Проект".
  • Найдите определение вашей сборки, щелкните по нему правой кнопкой мыши и выберите "Изменить определение сборки"

Добавить шаг сборки "Командная строка"

  • Предполагая, что вы находитесь в режиме редактирования для существующего определения сборки.
  • Нажмите вкладку "Build", если ее еще нет.
  • Нажмите "Добавить шаг сборки...".
  • Нажмите "Утилита" на панели навигации слева.
  • Нажмите кнопку "Добавить" рядом с "Командная строка" и закройте диалоговое окно.

  • Примечание. Нажмите только один раз. Добавляется, но диалог остается открытым.

  • В поле "Инструмент" укажите: $(Build.ArtifactStagingDirectory)\ILMerge.exe

  • Примечание: вам может понадобиться настроить этот путь в зависимости от того, откуда вы получаете ILMerge. Смотрите ниже раздел "Ссылки на ILMerge".

  • Во входных данных "Аргументы" укажите что-то вроде этого примера, который объединяет пять файлов в один и именует объединенный файл после имени определения сборки, которое является необязательным:
    
    /lib:"C:\Windows\Microsoft.NET\Framework\v4.0.30319" /out:"\\SomeServer\BuildDrops\Builds\$(Build.DefinitionName)\$(Build.BuildNumber)\$(Build.DefinitionName).dll" /log:"\\SomeServer\BuildDrops\Builds\$(Build.DefinitionName)\$(Build.BuildNumber)\MergeLog.txt" $(Build.ArtifactStagingDirectory)\ABC.Services.dll $(Build.ArtifactStagingDirectory)\ABC.Auth.dll $(Build.ArtifactStagingDirectory)\ABC.Lib.dll $(Build.ArtifactStagingDirectory)\ABC.Content.dll $(Build.ArtifactStagingDirectory)\ABC.Test.dll /targetplatform:v4`
    

Ссылка на ILMerge - Примечание. Есть несколько способов сделать это, поэтому я просто отмечу несколько.

1. Скопируйте ILMerge.exe из сети во время сборки. (Рекомендуемые)

  • Нажмите "Добавить шаг сборки...".
  • Нажмите "Утилиты" на левой боковой панели.
  • Нажмите кнопку "Добавить" рядом с "Копировать файлы".
  • Нажмите и перетащите шаг сборки "Копировать файлы", чтобы он предшествовал добавленной нами "Командной строке".
  • Нажмите на шаг сборки "Копировать файлы", чтобы мы могли отредактировать его.
  • В "Исходной папке" укажите сетевую папку, в которой можно найти ILMerge.exe.
  • В "Содержимое" укажите ILMerge.exe в качестве содержимого, если у вас нет файлов для копирования. Это поиск по шаблону, а указание ILMerge.exe - это поиск с точным соответствием.
  • В "Целевой папке" укажите $ (Build.ArtifactStagingDirectory)

2. Скопируйте ILMerge на клиентский компьютер сборки и создайте для него переменную среды на клиентах сборки.

  • Я не проверял это, потому что у меня нет прямого доступа к клиентам сборки, поэтому я выбрал альтернативный путь.

3. Возможно, вы сможете найти способ обращения к ILMerge напрямую из общего сетевого ресурса.

  • Ваш пробег может варьироваться, как и ваши относительные пути к файлам в аргументах, которые вам нужно передать.

4. Добавьте копию ILMerge в один из ваших проектов.

  • На самом деле не имеет значения, куда вы положили его в решение, потому что ILMerge.exe запускается после сборки.

  • Если вы разместите ILMerge.exe где-нибудь, кроме корня одного из ваших проектов, вам может потребоваться обновить путь к инструменту на этапе сборки "Командная строка" И вам потребуется обновить любой путь в аргументах, чтобы он отражал рабочий каталог ILMerge..EXE. Скорее всего, вам понадобится "..\..\" на вашем пути. Я не проверял это.*


Аргумент отмечает:

  • /lib:"C:\Windows\Microsoft.NET\Framework\v4.0.30319"

    • Возможно, вам придется пропустить это или изменить его. У нас было несколько устаревших проектов, которые нам нужно было поддержать. Если вам нужна дополнительная информация по этому конкретному вопросу, проверьте это: использование ILMerge с библиотеками.NET 4
  • /out:"\SomeServer\BuildDrops\Builds\$(Build.DefinitionName)\$(Build.BuildNumber)\$(Build.DefinitionName).dll"

    • Вы сможете найти свой путь, перейдя к шагу "Опубликовать артефакты сборки" (выше шага сборки из командной строки) и просмотрев поле "Путь:". Вы должны быть в состоянии скопировать весь этот путь, а затем добавить желаемое имя файла и расширение до конца.
  • журнал: "\ SomeServer \ BuildDrops \ Строит \$(Build.DefinitionName)\$(Build.BuildNumber)\MergeLog.txt"

    • Включать журнал необязательно. Я бы использовал его только для устранения проблем с ILMerge, а затем удалял его, когда все работает.
  • $ (Build.ArtifactStagingDirectory) \ ABC.Auth.dll

    • Это.dll, которые вы планируете объединить вместе.
    • Они просто разделены пробелом.
    • Build.ArtifactStagingDirectory - это место, куда ваши скопированные файлы копируются на клиентский компьютер сборки. Это временное место размещения, прежде чем они будут опубликованы на официальном пути удаления.
  • / Targetplatform:v4

    • Опять же, вам может понадобиться настроить это.

Дополнительные ресурсы: https://www.visualstudio.com/en-us/docs/build/steps/utility/command-line

Другие вопросы по тегам