Как использовать 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