Archive

Archive for 2011年12月

VS2008,2010ではOption Infer On, Option Strict Offが既定なんだ。

VBで型を省略したときの振る舞いをみていて、あれ?既定では暗黙の型変換の禁止(Option Strict)はOffなんだし、これでInvalidCastExceptionでるのか?と思ったら、型推論の利用(Option Infer)はOnが既定だから、型推論でIntegerとして推論された変数aに文字列を入れると実行時にInvalidCastExceptionが発生するんですね。。。

Infer Onを既定とするなら、Strict Onも既定にして欲しかったな。とりあえず、Strict をOnにすればコンパイル時にはじけるので、実行時エラーでしょんぼりしたくなかったら型推論を利用する場合はOption Strictは必ずOnにしたほうがいいですね。

そもそも、そんなエラーが出るようなプロジェクトでStrictをOnに変更したら、至る所でコンパイルエラーになって大変そう。。。まぁコンパイルエラーになるけれど、実行時エラーよりはだいぶマシですよね。

となると、型推論が無い時代のソース(2005以前)からアップグレードしたプロジェクトだと大変だよな。とおもったら、Visual Studio 2008時点のOption Inferのヘルプにこんなのが書いてありました。

On または Off の指定がない場合、Visual Basic 2008 で作成されるプロジェクトの既定値は On になります。以前のバージョンからアップグレードされたプロジェクトの既定値は Off になります。

http://msdn.microsoft.com/ja-jp/library/bb384665(v=VS.90).aspx

この記述2010のヘルプだと消えているんだけれど、2010でアップグレードした場合はどうなるんだろう。
→ ローカル型の推論のヘルプにアップグレードウィザードを利用したらInfer はOffになるって記述を発見

コード内で Option Infer の値を指定しなければ、コンパイラは既定で Option Infer On になります。 Visual Basic 2008 以前からアップグレードされたプロジェクトの場合、コンパイラは既定で Option Infer Off になります。

http://msdn.microsoft.com/ja-jp/library/bb384937.aspx

とりあえず型推論(Infer On)を利用するときは、暗黙の型変換の禁止(Strict On)を有効にして実行時エラーがでないようにしたほうが安心ですね。

カテゴリー:Visual Basic タグ: ,

ワークグループ構成のTFSでログインするユーザーを切り替える

2011年12月20日 2件のコメント

この記事は、TFS Advent Calendarの12/20分の記事です。TFS Advent Calendar : ATND

(Live Writerの操作を間違って、フライングで16日に一度公開しちゃっていたんだけれど、素知らぬ顔でもう一度公開します。)

TFSでは構築時にTFSのユーザー管理をワークグループ(ローカルコンピューター)で行うか、ActiveDirectory(ドメインサーバー)で行うかを選択できます。ActiveDirectoryでTFSを構成した場合は、Windowsログイン時にユーザーが確定されるので、その認証情報を元にTFSにシングルサインオンできます。ワークグループモードで作った場合は、Windows側で認証されていないので、TFS接続時にユーザーIDとパスワードを入力してログインします。

とはいえ、ワークグループで作成しても、ユーザーIDとパスワードを入力する機会というのはほとんどありません。ほとんどの場合は、初回にTFSに接続した段階のユーザーIDとパスワードをIEがキャッシュとして持っているものを利用するからです。

ただ、TFSエクスプローラーにはログアウト的なメニューが存在しないので、一時的に別のアカウントでログインしたい場合や、ユーザーの変更などで別アカウントでログインしたい場合は、IEの設定を変更して上げる必要があります。

Visual StudioはIEのセキュリティー設定をもとにTFSに接続に行くので、IEのセキュリティー設定で毎回ユーザーIDとパスワードを入力するように変更します。

インターネットオプション>セキュリティー>TFSのセキュリティーゾーン(ここでは信頼済みサイト)>レベルのカスタマイズ

image_thumb

設定ウインドウの一番下にある、ユーザー認証を「ユーザー名とパスワードを入力してログオンする。」に変更します。

image_thumb1

この状態でVisual Studioを起動すると、チームプロジェクト接続時にユーザー名とパスワードを聞いてくるようになります。

カテゴリー:TFS タグ: ,

Mono DevelopでVBのソースをコンパイルする。

Visual Basic Advent Calendar 2011の19日目です。
Atndはこちら。http://atnd.org/events/23108

VBのソースを編集するなら、もちろんVisual Studioですよね。(yoshiomsさんは秀丸で編集していましたが)。
Visual Studio 2005からは、無料のVisual Studio Expressも出てきて、誰でも.NETのプログラミングを簡単に体験できるようになったわけですが、LinuxやらMacやらを使っていたらVisual Studioはインストールできません。

そんな時お勧めなのがMono Develop! !って、僕も、以前Mono for Androidの記事を書いたときに一緒に入ったきり使ってなかったんで、VBのソース開こうとしたら候補に出てきたのでびっくりしたんですけれどね。

image

せっかく起動してくれたので、とりあえずビルドしてみる?ってことでビルドしたら、残念な感じでエラーが表示されてしまいました。Mono Developでは、コンパイルエラーがあると、問題の部分にメッセージを表示してくれます。コンパイルエラーの出方は好みがあるだろうけれど、これはこれでわかりやすいかもしれませんね。

image

って、日本語化けてますね。VBのコード自体は日本語も問題なく表示されるので、エラーメッセージリソースのエンコーディングが変なのかな?とりあえずメッセージがおかしいのは置いておいて、どうも.NET 3.5からの拡張構文を理解できていないっぽい。

プロジェクトの設定かな?。。。みたいです。MonoDevelopのメニューで、プロジェクト>オプション>ビルド>一般 を見ると、Mono / .NET 2.0ってのが選択されているようなので、 Mono / .NET 3.5を選択してやりましょう。

image

早速実行してみましょう。デバック実行はVisual Studioと同じでF5です。

問題なくコンパイルして実行してくれました。

image

新しい環境だと、Visual Basic名前空間の実装が面倒だとかで、だいたい置いてきぼりを食らうVBですが、Monoがんばりますねー(Mono for AndroidはまだVBに対応していません)。

 

その他

起動したことなかった(汗)なんだけれど、こいつってASP.NET MVCも標準でサポートしてるんですね(MVCはC#のみ。。。)。びっくり。

image

おぉ、Visual Studio 2010からサポートされた、マルチスタートアップまでサポートされてる。

image

チームドキュメントの変更を受け取る

2011年12月14日 1件のコメント

この記事は、TFS Advent Calendarの12/14分の記事です。TFS Advent Calendar : ATND

接続しているプロジェクトをチームエクスプローラーで見ると、ドキュメントツリーの下に幾つかのドキュメントを見て取れます。ここには、プロジェクトで共有するドキュメントなどを格納していくのですが、新しいファイルが追加されたり、ファイルが更新された際にメールで通知を受けるにはどうしたらいいでしょうか。

答え

SharePointの機能を利用して、通知を設定します。

TFSと言うよりも、TFSがポータルサイトに利用しているSharePointの機能なのですが、チームエクスプローラーのドキュメントフォルダーの実体は、そのチームプロジェクトのプロジェクトポータルがホストされているSharePointのリストになります。変更を購読したいリストの通知を設定すればいいだけです。

image

もちろん通知の機能を利用する場合は、ユーザーに対してメールアドレスが設定されている必要があります。TFSをアクティブディレクトリー構成で構築していれば問題ありませんが、ワークグループ構成で構築したい場合は、ユーザーに対してメールアドレスがうまく設定されない(というか、SharePointのユーザー設定からメールアドレスを設定できない)ので、SPUserの設定をどうにか書き換えて上げる必要があります。

PowerShellを利用したメールアドレスの設定についてはこちら
SharePointのユーザーをPowerShellで修正してみる。

プロジェクトポータルのURLがわからない(!?)場合は、チームエクスプローラのコンテキストメニューから、「プロジェクトポータルの表示」をクリックしてプロジェクトポータルを開くのが簡単です。

image

プロジェクトポータルを開いたら、サイドバーから通知を設定したいリストを選択し、リボンのライブラリを開きます。

image

ライブラリタブを開き、ブラウザーをそれなりに大きくすると、リボンに幾つかのアクションが見て取れます。ドキュメントが追加されたり、修正されたりした場合にメールによる通知が欲しい場合は、「通知」>「このライブラリに通知を設定」をクリックします。メーラーにアウトルックを利用している場合は、ライブラリタブの「Outlookに接続」を利用すると、ドキュメントをアウトルックで読んだり、更新を確認できるようになって便利です。

image

通知の設定画面が出てくるので、どの頻度で通知を受け取るか設定してOKボタンをクリックします。

image

誰かがドキュメントに、ファイルを追加するとこんなメールが来ます。

image

カテゴリー:TFS タグ: ,

With

2011年12月12日 1件のコメント

Visual Basic Advent Calendar 2011の12日目です。Atndはこちら。http://atnd.org/events/23108

どうせVBについて書くんなら、VBならではのことを書こう。とはいえ、気になるものはすでにブログの記事なんかにしているから、改めて何を書こうかネタを探すと難しいんだよね。C#には無いものだと、やっぱりMyとかWithとかのキーワードかなぁ。Myは微妙に消えてしまいそうな気もするのでWithかなぁ。

ということで、Withの新しい使い方、初期化子について触れてみます。

今の仕事上、まだまだVB6のプログラムを見ることが多いんだけれど、オブジェクト名のタイプを減らしたいのか、やけに長いスコープでWithを使っているプログラムがあるんですよね。一体このWithはどこにかかっているのか問い詰めたい感じです。

そういったWithの使い方は死んでしまえと思うわけですが、こと初期化に限っていえば、変数の初期化はここからここまででやっていますよーってのがわかるので、そのWithがどのオブジェクトかわかるならWithは短いスコープでどんどん使っていけ!!という感じはしています。もちろんどんなに短くてもネストは嫌です。

そんな意味では、VB9からの初期化子を使ったWithの使い方はさすがだなーと思わせます。

以前Twitterでつぶやいたことがあるんだけれど、拡張メソッドを集めているサイト(http://www.extensionmethod.net/)に、VBだからこそ力を発揮する拡張メソッド、Selfってのが紹介されています。定義はこんな感じです。

<Runtime.CompilerServices.Extension()> _
Function Self(Of T)(ByVal x As T) As T
    Return x
End Function

この拡張メソッドは、obj.Selfとするとobjを返却してくれるメソッドです。これだけだと微妙に何をしたいのかわからないのですが、VBのWithや初期化子を使うと、こんな感じでコードが書けます。

Module Module1
    Sub Main()
        Dim target = New Hoge With {
            .ThisObject = .Self,
            .String1 = "abc",
            .String2 = "123"
        }
        Console.WriteLine("{0} = {1}", target.String1, target.ThisObject.String1)
    End Sub
End Module

この初期化しを展開してしまえばそんな難しいことはやっていないし、どこで使うのと聞かれてもパットはでてこないけれど、ちょっと面白いでしょ。

カテゴリー:プログラミング, Visual Basic タグ:

チームビルドでMSBuildファイルを利用する。

2011年12月9日 1件のコメント

この記事はTFS Advent Calendarの9日目の記事です。
サイトはこちら:http://atnd.org/events/22819

TFS2010になってから、チームビルドがWFベースになってしまいついていけていない僕がいます。単純にソリューションファイルをビルドするだけならいいんだけれど、ビルドプロセスをいじり始めると途方にくれてしまいます。だって単純なビルドプロセスでも、こんなWFが作られるんだもん。。。修正する部分は一部分とはいえ、WF初心者にいきなりこれは辛い。

image

まぁ実際のところは、TFS2010のビルド定義はかなり汎用化されているので、一般的なソリューションファイルをビルドするだけのプロセスだったらデフォルトのテンプレートで事足りてしまうし、TechNetマガジンではできるだけビルドテンプレートのカスタマイズはするなとも書いてありますね。

http://technet.microsoft.com/ja-jp/magazine/gg265783.aspx#

TFS2010からはビルド定義がWFになったおかげで、ビルドプロセスが可視化されたのは嬉しいことなのですが、これまで自分で作ったMSBuild用のカスタムタスクもワサワサあるし、無料で使えるコミュニティーベースのタスクもある。それとは違う次元で自動生成されるビルドプロセスが大きくて理解しきれていないとかとか、ビルドプロセスを自分でカスタマイズするためにWFベースのビルドプロセスに乗り換えちゃうにはまだちょっと敷居が高いわけです。

MSBuildファイルをビルドプロセスに利用する場合は、ビルドのプロセス設定で、ビルドするプロジェクトにMSBuildファイルを指定します。

image

ビルドするプロジェクトを選択する画面では、ソリューションファイル(sln)の他に、MSBuildプロジェクトファイル(proj)も選択できます。ファイルのフィルターが(*.*proj)になっているので、VBのプロジェクトファイル(vbproj)やC#のプロジェクトファイル(csproj)も一緒に列挙されます。まぁこの子たちもMSBuildファイルですからね。

image

カテゴリー:プログラミング, TFS タグ:

Mono for Android 2.0

Ice Cream Sandwichに正式対応したMono for Android 2.0がリリースされてています。

http://xamarin.com/monoforandroid

 

これに伴い、ドキュメントサイトも全面的に再構成が行われているようです。

ドキュメント http://docs.xamarin.com/android

チュートリアル http://docs.xamarin.com/android/tutorials

 

リリースノートがどこにあるか見当たらないんだけれど、リリース案内のメールを見るかぎり出来上がるパッケージのサイズが小さくなるようでこれは嬉しいかも。1.*でビルドすると、小さなアプリでもパッケージサイズが爆発しているんで。。。

カテゴリー:プログラミング タグ: ,