VB.NET

FirstChanceExceptionが無限ループに陥らないようにする実装方法

.Net 4.0 から導入された FirstChanceException イベントハンドラは、例外が発生した際に最初に例外が通知されるイベントです。(try catch よりも先に。) 但し、注意点としてFirstChanceExceptionイベントハンドラの中で新たに例外が発生するとFirstChance…

例外の処理コストとパフォーマンスチューニング

例外に掛かる処理コストについてint.Parseとint.TryParseを使って比較調査を行ってみました。 入力された文字が数字か否かを判断する方法として、数値ではない場合に例外を発生させるint.Parseがあります。 private bool IsNumericByException(string test) …

InnerExceptionは誰が設定するのか(例外が再スローされるときにいつでも設定される訳ではない)

MSDNにはInnerExceptionについて以下のような説明があります。 ファイルを読み取り、そのファイルのデータの書式を指定する関数があるとします。この例では、ファイルの読み取りを試みるコードとして、IOException がスローされます。この関数は、IOExceptio…

throw ex と throw の違い。例外の再スローについて。

例外を再スローする場合は、 throw ex; ではなく throw; と書きます。 上の2つはとてもよく似ていますが処理内容は全く異なります。throw exは実行したメソッドで新しく例外をスローしますが、throwとだけ書いた場合は例外を変更無しに再スローします。”変…

JISコードによる入力可能文字の判定(第1水準、第2水準、第3水準、第4水準、半角文字など)

他のシステムにデータ連携を行う場合などに、文字化けを起こさないよう入力文字のチェックを行う場合があります。 今回は、JISコードを使って入力可能文字の判定処理を整理したいと思います。 まず、JISコードの体系ですが「区点番号」という番号体系で文字…

Debug構成とRelease構成の違い

ビルド構成の Debug と Release の違いについて調べてみました。 開発中だから Debug 構成、リリースする時は Release 構成という 固定観念 ではなくて、開発中とリリース時での動作に一切の違いがあってはいけないから安全に動作することを最優先にリリース…

例外処理。Try Catch、Try Finally、既定例外の基本的な動きと特性の理解。(UnhandledException,ThreadException)

例外処理の基本的な動きと特性について整理してみました。まずは、基本から。 Try Catch Tryブロックの範囲で実行されるコードは例外が発生した場合に必ずCatchブロックの処理が呼び出される事が保証されます。 Try Finally Tryブロックの範囲で実行されるコ…

Team Foundation Server (TFS) と Visual Studio のバインドを解除する

TFS 管理下にあるプロジェクトをTFSに接続できない環境に持っていく、自動ビルドやバッチでの静的解析の際にバインド情報が残存しているとバッチ処理に失敗するなど、TFSのバインド情報を削除する必要があります。今回は、TFSのバインド情報が、どのように構…

参照設定のプロパティ設定。特定バージョンの挙動について

参照設定のプロパティ設定、特定バージョンについて調査してみました。 この特定バージョンの設定ですが、以下の2条件を満たしたアセンブリを参照設定した場合に設定できるようになります。 厳密名を設定している GAC(Global Assembly Cache)に登録している…

.Net の 定数値・列挙値 は単なる置換

プログラミング .NET Framework 第3版 (マイクロソフト公式解説書)の第7章によると、.Net の定数値・列挙値は単なる置換処理だそうです。私は値が固定の変数があるとイメージしていたのですが実際は違うようです。定数・列挙値の動作と問題点について考えて…

DLLの配置場所を変更する(probing, codebase, developmentMode)

.Net アプリケーションは DLL(アセンブリ)をロードする場合、Exe と 同じフォルダ、もしくは、グローバルアセンブリキャッシュ(GAC)を検索します。しかし、probing , codebase, developmentMode といった手法を使用すると検索範囲を拡張したり変更する事…

厳密名を持つアセンブリとは何なのか調べてみた

アセンブリを参照設定する際に「厳密名」というキーワードが出てきます。「厳密名」とは何か、参照設定での違いはあるのか、実行時にどのように動くのか調べてみました。 厳密名とは 厳密名とは、以下の4つの属性を使ってアセンブリを一意に識別する名称で…

.Netアプリに設定するバージョン情報を整理する。(ファイルバージョン、製品バージョン、アセンブリバージョン)

■バージョン番号の各セクションの意味 アセンブリに設定するバージョン番号は、[3.1.5.1] というように4つセクションで構成されます。まず、MicroSoftは以下のルールでセクションごとに意味を持たせています。 メジャー番号 (主要な機能をアップデート/リリ…

異なるクラスでもコピーするXMLSerializerを使用した汎用のディープコピー処理(ICloneable, MemberWiseClone, Serializable, XmlSerializer, MemoryStream)

前回、どんなオブジェクトでもコピーできる処理を作ってみました。今回は、クラスが異なる場合でもプロパティの名前さえ一致すればディープコピーできる処理について整理してみました。どんなオブジェクトでもコピーできる汎用のディープコピー処理(IClonea…

どんなオブジェクトでもコピーできる汎用のディープコピー処理(ICloneable, MemberWiseClone, Serializable, BinaryFormatter, MemoryStream)

シリアライズを利用した汎用のオブジェクトのディープコピー処理について整理しました。BinaryFormatterを使用してMemoryStreamに対してシリアライズ/デシリアライズを行いオブジェクトのメモリイメージのコピーを作成するテクニックです。理論上、Serializ…

ファイルの最終行を削除する。ファイルの末尾の改行コードを削除する。(String.LastIndexOf)

ファイルの最終行を削除する場合は、String.LastIndexOfで末尾から改行コード(vbCrLf)を検索して見つかった位置からの文字列を削除します。すべての行に改行コードが付いている場合は、ファイルの末尾から2つ目の位置にある改行コード以降の文字列を最終行…

ファイルの末尾に文字列を追記する。(System.IO.File.AppendAllText)

ファイルの末尾に文字列を追記するにはSystem.IO.File.AppendAllTextメソッドを使用します。(いくつか方法がありますが最も簡単な方法) Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handl…

VssWinMergeComparer。VisualStudio2008アドイン。(VisualSourceSafe2005の最新バージョンと編集中の作業ディレクトリをWinMergeで比較する。)

VisualSourceSafeの最新バージョンと作業フォルダの編集中のファイルをWinMergeで比較するVisualStudio2008のアドインを作成しましたので公開します。VssWinMergeComparerバイナリモジュールVssWinMergeComparer-bin.zip ソースコードVssWinMergeComparer-sr…

Visual Studio 2008 と Visual Source Safe(VSS)のバインド情報を取得する。

サンプルコードVisual Studio 2008 と Visual Source Safe はチェックイン・チェックアウトの操作をIDE上から実施できるように、プロジェクトとソリューションをVSSのプロジェクト(フォルダ)と対応付けして連携して処理ができるようにしています。このバイン…

指定したパス情報がファイルかフォルダ(ディレクトリー)か判断する。

指定したパス情報がファイル名かフォルダ名か判断するにはSystem.IO.File.Exists関数とSystem.IO.Directory.Exists関数を使います。File.Exists関数は、指定したパスがフォルダとして存在している場合でもファイルではない場合はFalseを返します。また、Dire…

相対パスを絶対パスに変換する。(System.Uri)

相対パスは、あるフォルダを基準とした場合のパス情報です。基準となるディレクトリはカレントディレクトリが使用される場合が多いですが、任意のディレクトリを指定した相対パスを使う場合もあります。カレントディレクトリを基準とする場合は、相対パスの…

ウインドウメッセージのリフティング処理(PostMessageの隠れた使い方)

ウインドウアプリケーションでは、ウインドウそれぞれがメッセージキューを持っていて順番にメッセージを処理します。処理が終わるまでは、次のメッセージは処理されません。この特性を利用して、処理のタイミングを調整するプログラミングテクニックをウイ…

Visual Source Safe (VSS) と Visual Studio のバインドを解除する

VSS 管理下にあるプロジェクトをVSSに接続できない環境に持っていく、自動ビルドやバッチでの静的解析の際にバインド情報が残存しているとバッチ処理に失敗するなど、VSSのバインド情報を削除する必要があります。今回は、VSSのバインド情報が、どのように構…