2016年12月13日火曜日

VB .Netframework のバージョン番号を

.Netframework の番号 ってややこしいですよね。
プログラミングして値を取得しても、 4.x 系 では 皆 4.0.30319 が返ります。
例え、 4.6.1 や 4.6.2 がインストールされていようとも、 この値です。
何故?。


プログラムで 今 どの .Netframework に頼って動いているかを表示させるのに、
   System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion
が使われます。
4.x 系 では 皆 4.0.30319 が返ります。

と書いたものの、 詳しくないので、良く分かりません。
どうして、実際に動いているライブラリのバージョン番号が返って来ないのか ... 。

でも、 これだけ は分かります。
.Netframework 4.x 系に限れば、 パソコンにインストールされるものは 唯ひとつ のみ。
バージョンアップやダウンで更新しても、 ひとつだけが動いています。

そして、通常の確認方法は、
レジストリに登録された Version または Release の値を取得して判断します。
   方法 : インストールされている .NET Framework バージョンを確認する
   https://msdn.microsoft.com/ja-jp/library/hh925568(v=vs.110).aspx
   https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx   v.4.6.2 対応


さて、 レジストリから引かなくても、簡単に出来ないの?。

そう、思い出して下さい。
.Netframework 4.x 系 は 既定の場所に配置された dll ファイルで動いています。
一般的な場所は
     C:\Windows\Microsoft.NET\Framework\v4.0.30319\ の Directory
に格納されています。
ファイル名は
     mscorlib.dll
ですね。

ならば、 その ファイル情報から、 バージョン情報を取得して見ましょう。

コードはこれ。

        Dim clrVersionRuntimeDir As String = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory
        Dim clrVersionRuntimeFile As String = clrVersionRuntimeDir & "mscorlib.dll"
        Dim vi As System.Diagnostics.FileVersionInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(clrVersionRuntimeFile)
        Dim clrActiveVersion As String = vi.ProductVersion

major-minor-build-revision の順で . (ドット)区切り で出力されます。
例えば、この様な値が返ります。  4.6.1586.0 。

そう。  4.0.30319 ではありません。
上の変数 vi の戻り値を見て見れば、  各要素を構成する数値は、
4.0.30319 は 夫々 ProductMajorPart, ProductMinorPart, ... の数値で、
4.6.1586.0 は 夫々 FileMajorPart, FiletMinorPart, ... の数値です。



ライブラリのファイル情報が正確なうちは この方法で 少し詳細が表示出来る 訳ですね。



尚、 .Netframework と OS との関係 や 依存関係 については、 以下を参照下さい。

   .NET Framework のバージョンおよび依存関係
   https://msdn.microsoft.com/ja-jp/library/bb822049(v=vs.110).aspx



そうそう、書くのを忘れました。
これをご覧になる方は きっと お分かりか とは思いますが、
上の方法は、実行時に参照しているライブラリのファイルの番号であり、
Solution/Project で設定した Target framework を取得している訳ではありませんので ... 。.



[2016/12/16] Target frameworkではない件を追記

0 件のコメント:

コメントを投稿