プログラミングして値を取得しても、 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 件のコメント:
コメントを投稿