0

У меня есть проект «A», которому нужен пакет развертывания другого проекта «B».Создать пакет развертывания во время события сборки

Я хочу, чтобы это произошло автоматически, чтобы «A» зависело от «B», а в событии pre-build «A» пакет развертывания создан для «B».

Я знаю, как это сделать вручную (щелкните правой кнопкой мыши «B» -> Build Deployment Package-> build «A»), и он отлично работает, но как автоматизировать его, как описано?

("А" на самом деле проект WIX)

ответ

2

Есть два способа сделать это:

  1. Всегда построить пакет B после того, как B построен или
  2. Всегда построить пакет B перед A построено

Преимущество первого заключается в том, что A должен знать меньше о B. Преимущество второго заключается в том, что B можно построить во время разработки без шага построения p ackage.

Как вы знаете, проекты Visual Studio являются проектами MSBuild. Вы можете редактировать их в Visual Studio, выбрав «Выгрузить проект», а затем «Изменить» в контекстном меню проекта в обозревателе решений. Часто бывает проще и иногда необходимо добавлять этапы сборки таким образом, как через редактор Build Events. Если вы хотите оставить ключ к настройке файла проекта, вы можете добавить команду «rem» в поле «Предварительная сборка».

В любом из вышеуказанных случаев, проект Package target проекта B должен быть запущен до цели сборки проекта A. Выбрав второй случай выше, добавьте этот MSBuild task в цель A BeforeBuild.

<MSBuild 
    Projects="relative-or-absolute/path/to/B.xxproj" 
    Targets="Package"> 
</MSBuild> 
0

Я закончил с кодом pre-build-event. Решение Toms, вероятно, лучше.

echo off 

set THEME_REGKEY=HKLM\Software\Microsoft\MSBuild\4.0 
set THEME_REGVAL=MSBuildOverrideTasksPath 

REM Check for presence of key first. 
reg query %THEME_REGKEY% /v %THEME_REGVAL% 2>nul || (echo No theme name present! & exit /b 1) 

REM query the value. pipe it through findstr in order to find the matching line that has the value. only grab token 3 and the remainder of the line. %%b is what we are interested in here. 
set THEME_NAME= 
for /f "tokens=2,*" %%a in ('reg query %THEME_REGKEY% /v %THEME_REGVAL% ^| findstr %THEME_REGVAL%') do (
    set THEME_NAME=%%b 
) 

REM Possibly no value set 
if not defined THEME_NAME (echo No theme name present! & exit /b 1) 

REM replace any spaces with + 
set THEME_NAME=%THEME_NAME: =+% 

if errorlevel 1 goto BuildEventFailed 
%THEME_NAME%MSBuild "$(SolutionDir)Web\Web.csproj" /t:Build;Package /p:Configuration=$(Configuration) 
Смежные вопросы