0

別のプロジェクト「B」の展開パッケージを必要とするプロジェクト「A」があります。

「A」が「B」に依存し、「A」のビルド前イベントで展開パッケージが「B」用に作成されるように、これを自動的に実行したいと考えています。

これを手動で行う方法を知っています (右クリック "B" -> Build Deployment Package -> build "A")。正常に動作しますが、説明どおりに自動化するにはどうすればよいですか?

(「A」は実際には WIX プロジェクトです)

4

2 に答える 2

2

これを行うには、次の 2 つの方法があります。

  1. B がビルドされた後に常に B のパッケージをビルドするか、
  2. A がビルドされる前に常に B のパッケージをビルドする

1 つ目の利点は、A が B についてあまり知らなくてもよいことです。2 つ目の利点は、開発中にパッケージをビルドするステップなしで B をビルドできることです。

ご存知かもしれませんが、Visual Studio プロジェクトは MSBuild プロジェクトです。ソリューション エクスプローラーのプロジェクトのコンテキスト メニューから [プロジェクトのアンロード] を選択し、[編集] を選択して、Visual Studio でそれらを編集できます。多くの場合、この方法でビルド ステップを追加する方が、ビルド イベント エディターを使用するよりも簡単で、必要になる場合もあります。プロジェクト ファイルのカスタマイズについて手がかりを残したい場合は、"rem" コマンドをビルド前イベント フィールドに追加できます。

上記のいずれの場合でも、プロジェクト B のパッケージ ターゲットは、プロジェクト A のビルド ターゲットの前に実行する必要があります。上記の 2 番目のケースを選択して、このMSBuild タスクを A の BeforeBuild ターゲットに追加します。

<MSBuild
    Projects="relative-or-absolute/path/to/B.xxproj"
    Targets="Package">
</MSBuild>
于 2013-05-27T13:36:48.870 に答える
0

私はこのプレビルドイベントコードになりました。ただし、トムのソリューションの方がおそらく優れています。

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)
于 2013-05-28T08:23:42.917 に答える