2009/04/28

MSBuildExtensionPackで環境変数(EnvironmentVariable)が1つになる!?

これは、はまった…

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

<Exec Command="echo %PATH%"/>
<MSBuild.ExtensionPack.Computer.EnvironmentVariable
TaskAction="Set"
Variable="PATH"
Value="$(PATH)"/>
<Exec Command="echo %PATH%"/>


とやると、環境変数が先頭の1つだけになる…

しかたなく、コードを見てみると
http://msbuildextensionpack.codeplex.com/SourceControl/changeset/view/22777#498089

こいつだー!!

Environment.SetEnvironmentVariable(this.Variable, this.Value[0], this.target);


なんで配列で持ってるのに先頭だけ渡すかなぁー

とりあえず英語がんばってBTSあげてみました。
http://msbuildextensionpack.codeplex.com/WorkItem/View.aspx?WorkItemId=2872

始めてやってみたけど、返してくれるかなぁ
期待しないで待ってみよう♪


<2009/4/30追記>
mikeFourieさんが1日足らずで対応してくれた♪
仕事早!!

でもExtensionPackはNightlyBuildがないし、VS2005ではコンパイルできないしで
修正版バイナリは3.5.3.0まで待たないとダメみたい…

dllだけでもほしいなぁー

subversion(svn)の1.6からファイル単位の外部参照(svn:externals)が可能に

待ちに待ったファイル単位の外部参照が可能になった♪

とりあえず設定してみる(TortoiseSVN)

属性に外部参照を設定


属性名:svn:externals
属性値:/trunk/hoge/file.ext file.ext


さっそく「更新」!!

してみるとエラーが…orz

URL 'http://hoge/file.ext' が参照しているのはファイルです。ディレクトリではありません


なにー!!
せっかくサーバのsvnを入れ替えたのにできないだと!?

調べてみるとクライアントのsvnのversionが古かった…

サーバ   :1.6.0
クライアント:1.5.2

クライアントも1.6にしてみたらうまくいきましたとさ♪

(恐らく1つのフォルダで複数レポジトリを管理する時に.svnフォルダ内のファイルを書き換える(merge)必要があるのだろう)

ちなみに、外部参照を複数指定したかったら、属性値入力ダイアログで改行する


改行しないで続けて入力すると↓のエラーが発生します。
属性 svn:externals を 'C:\hoge' においてパースする際にエラーが発生しました: '/trunk/hoge hoge /trunk/hoge2 hoge2'


相対パスはツールチップにも出てくるけど↓な感じ

svn:externals
改行で区切られたモジュールのリストであり、リビジョン、URL、相対的なディレクトリのパス、
で構成されます。例えば、
http://example.com/repos/zig foo
-r 1234 http://example.com/repos/zag foo/bar

URLは完全なURLもしくは相対的に記述することができます。
相対的なURLの記述例は:
../親ディレクトリ
^/レボジトリルート
//URLスキーム
/ サーバのホスト名


ほんとsubversionは快適だなぁ~

2009/04/23

MSBuildリンク

MSBuildを活用して開発時の作業を自動化する

MSBuild解説

MSBuild完全攻略

MSBuildリファレンス

ちょっと気になる

MSBuild と Windows Installer XML を使ったリリースの自動化
WiX / Windows Installer はじめの一歩

Visual C++を使ったカスタムMSBuildタスクの開発

ClickOnce アプリケーションのコマンド ラインからのビルド

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


よしよし♪

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

2009/04/09

Hudsonのインストール場所を変更する

Hudsonはデフォルトで↓の場所にインストールされます(Windowsの場合)


C:\Documents and Settings\[user]\.hudson


この場所にソースとログも蓄積されるため、ほっとくとびっくり容量になります…(+_+)

しかし、この場所は途中からでも変更することができます!

「環境変数」に「HUDSON_HOME」を追加!



やりたいことがちゃんとできちゃう♪
Hudsonサイコーです!