在构建事件期间创建部署包



我有一个项目" a ",需要另一个项目"B"的部署包。

我希望这是自动发生的,以便"A"依赖于"B",并且在"A"的预构建事件中,部署包是为"B"制作的。

我知道如何手动做到这一点(右键单击"B"->构建部署包->构建"A"),它工作得很好,但如何将其自动化描述?

("A"实际上是一个WIX项目)

有两种方法:

  1. 总是在构建B之后构建B的包或
  2. 总是在构建A之前构建B的包

第一种方法的优点是A对B的了解更少,第二种方法的优点是B可以在开发过程中构建,而不需要构建包。

你可能知道,Visual Studio项目是MSBuild项目。可以在Visual Studio中编辑它们,方法是在解决方案资源管理器的项目上下文菜单中选择"卸载项目",然后选择"编辑"。与通过build Events编辑器添加构建步骤相比,以这种方式添加构建步骤通常更容易,有时也是必要的。如果你想留下关于项目文件定制的线索,你可以在Pre-build事件字段中添加一个"rem"命令。

在上述任何一种情况下,项目B的Package目标必须在项目A的Build目标之前运行。选择上述第二种情况,将此MSBuild任务添加到A的BeforeBuild目标中。

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

我最终得到了这个预构建事件代码。不过,汤姆的解决方案可能更好。

echo off
set THEME_REGKEY=HKLMSoftwareMicrosoftMSBuild4.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)WebWeb.csproj" /t:Build;Package /p:Configuration=$(Configuration)

最新更新