2009/04/22

MSBuild Extension Pack導入 VSSが取得できない!?

ビルドの自動化をするためにMsBuildを使ってるけど
デフォルトでVSSを取得できないので、拡張パックを導入

CommunityTaskとExtensionPackの2つがあったけど
CommunityTaskは更新が止まってそうだし
ちょうど2009/03/15にExtensionPackが更新されたのでExtensionPackにした

・対象
WindowsXP SP3
NetFramwork3.5
VisualStudio 2005 SP1 (VC++)
SourceSafe 6
ExtensionPack 3.5.2.0

・ダウンロード
http://msbuildextensionpack.codeplex.com/

・インストール
msiを叩くだけ

・ビルドファイル作成
ファイル名:Build.proj
タスク:VssGet

<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="VssGet">
<MSBuild.ExtensionPack.VisualStudio.SourceSafe TaskAction="Get" Database="C:\SourceSafe\" UserName="UserName" FilePath="$/TEST" Arguments="-GL. -R"/>
</Target>
</Project>


・実行
外部からタスクを呼ぶ時は「/t:」オプションを使う

D:\test>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\msbuild.exe Build.proj /t:VssGet
Microsoft(R) Build Engine Version 2.0.50727.3053
[Microsoft .NET Framework, Version 2.0.50727.3082]
Copyright (C) Microsoft Corporation 2005. All rights reserved.

2009/04/22 16:59:46 にビルドを開始しました。
__________________________________________________
プロジェクト "D:\test\Build.proj" (VssGet ターゲット):

ターゲット VssGet:
D:\test\Build.proj(19,9): error : Win32Exception: 指定されたファイルが見つかりません。
D:\test\Build.proj(19,9): error :
プロジェクト "Build.proj" 内のターゲット "VssGet" のビルドが終了しました。 -- 失敗

プロジェクト "Build.proj" のビルドが終了しました。 -- 失敗

ビルドに失敗しました。
D:\test\Build.proj(19,9): error : Win32Exception: 指定されたファイルが見つかりません。
D:\test\Build.proj(19,9): error :
0 警告
1 エラー

経過時間 00:00:00.10


ありゃ
なんだか失敗
これだけじゃ原因がわからん…

ヘルプも見たけどさっぱりわからん
http://msbuildextensionpack.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=18970#DownloadId=61972

・調査
やっぱコードでしょ♪

ってことで、C#なんてわからんがソースコードを眺めてみる
http://msbuildextensionpack.codeplex.com/SourceControl/changeset/view/22589#498119

すると「ss.exe」の文字発見♪
ExtensionPackはCOM経由でなくてss.exe直かい!

HudsonやCommunityTaskはCOM経由だったような…
まぁEXE直接の方が早そうな気もする(憶測)

SourceSafeはインストールしても、環境変数PATHに追加しないので
自分で追加する必要があり

・修正
環境変数にVSSまでのパスを追加する
OSで設定してもいいけど、今回はMSBuild上で設定


<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="VssGet">
<MSBuild.ExtensionPack.Computer.EnvironmentVariable TaskAction="Set" Variable="PATH" Value="C:\Program Files\Microsoft Visual Studio\VSS\win32"/>
<MSBuild.ExtensionPack.VisualStudio.SourceSafe TaskAction="Get" Database="C:\SourceSafe\" UserName="UserName" FilePath="$/TEST" Arguments="-GL. -R"/>
</Target>
</Project>


・再実行

C:\test>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\msbuild.exe Build.proj
Microsoft(R) Build Engine Version 2.0.50727.3053
[Microsoft .NET Framework, Version 2.0.50727.3082]
Copyright (C) Microsoft Corporation 2005. All rights reserved.

2009/04/22 16:58:43 にビルドを開始しました。
__________________________________________________
プロジェクト "D:\test\Build.proj" (VssGet ターゲット):

ターゲット VssGet:
Setting Environment Variable: "PATH" for target "Process" to "C:\Program Files\Microsoft Visual Studio\VSS\win32".

$/TEST:
test.txt を取得しています。


ビルドに成功しました。
0 警告
0 エラー

経過時間 00:00:08.46


よしよし♪

にしても、使い方がどこにものってないのですごく苦労しそうだ…

0 件のコメント: