いっしきまさひこBLOG

Web制作関連、プログラミング関連、旅行記録などなど。

特定OSでしかサポートされない.NETのクラスを知るには?

 .NET Frameowrkで作成したアプリケーションは、次のようなWindowsオペレーティング・システム(=プラットフォーム)で動作可能です。

  Windows 98/98 SE/Me/NT 4.0(SP6a以上)/2000/XP Home Edition/XP Professional/Server 2003

 またASP.NETを利用している場合にはIISが必要となるため、次のようなプラットフォームがサポート対象となります。

  Windows 2000/XP Professional/Server 2003

 .NET Frameworkはこのようなさまざまなプラットフォーム対応していますので、当然、作成したアプリケーションをこれらすべてのプラットフォームで動作させたいと考えることが多々あります。そして、確かに.NET Frameworkはこれらプラットフォームの違いを基本的に隠ぺいしてくれていますので、何もせずとも.NETアプリケーションはマルチ・プラットフォーム対応となるはずです。

 しかしこれはあくまで「基本的にできるはず」というだけの話で、必ずしも常にマルチプラットフォームで動作するかというと、そうとは限りません。なぜなら、すべての.NETクラスやそのメソッド/プロパティは、必ずしもすべてのプラットフォーム上で利用可能なわけではないからです。

 例えば、EventLogクラス(System.Diagnostics名前空間)や、Processクラス(System.Diagnostics名前空間)にある一部のプロパティ(例えば、ページングされるメモリのサイズを取得するためのProcess.PagedMemorySizeプロパティ)、またFileSystemWatcherクラス(System.IO名前空間)は、Windows 98上では利用できません。これらのうち1つでも使用したアプリケーションは、マルチ・プラットフォーム対応となりません。

 もちろんこの例に挙げたEventLogクラスは、イベント・ログを扱うクラスなので、NT系(Windows NT 4.0/2000/XP/2003 Server)でしか利用できないということは、恐らく考えなくても分かるでしょう。しかしプロセスを扱うProcessクラスは、(そのクラス自体はマルチ・プラットフォーム対応にもかかわらず)その一部のプロパティ(例えば、PagedMemorySizeプロパティ)だけがWindows 98/Meで利用できないということは、すぐに判断できるでしょうか。またファイル・システムの変更を監視するためのFileSystemWatcherクラスがWindows 98/Meで利用できないというのは、何も調べずに分かることでしょうか。

 やはり.NETであっても、利用する際にそのクラスがどのプラットフォームで利用可能かは、ちゃんとチェックすべきかもしれません。ちなみに、MSDNライブラリのページの下の方にある「必要条件」の「プラットフォーム」の欄を参照すれば、それをチェックできます。

dnetplatfm1.gif

 しかしはっきりいって、.NETにおけるクラスおよびメソッド/プロパティはマルチ・プラットフォーム対応のものが圧倒的にほとんどで、特定のOSだけでしか使えないものは非常にまれです。従って、クラスを使う際に逐一チェックするとしたら、苦労が増えるばかりでその効果は薄いでしょう。

 そこで逆に、特定のOSだけでしか使えないクラスやメソッド/プロパティにどのようなものがあるかを、「事前に知っておく方法」を私はお勧めましす。もちろん併せて利用可能なプラットフォームのチェックを行った方がより良いでしょうが、このように事前に知っておくことの方が(逐一チェックしなければならないことよりも)効果が高いと考えています。

 それでは、特定OSでしか使えないクラスやメソッドなどはどうやったら知ることができるでしょうか。これについては、マイクロソフトが提供する次のWebページの最下部にある「Appendix」にまとめられていますので、そちらを参照してください。

 ・MSDN:「.NET Framework Support on Windows Operating Systems

 なおこの情報は少し古く、.NET Framework 1.0についての情報です(しかしもちろん.NET Framework 1.1においても参考になると思います)。

 ちなみに.NET Framework 1.1に関する情報はまだ探し出せていないので詳しくは分かりませんが、.NET Framework 1.1でもこのような特定のOSに依存したクラスは追加されています。例えば、Activityクラス(System.EnterpriseServices名前空間)はWindows Server 2003でしか利用できません。このような.NET Framework 1.1で新たに追加されたクラスはMSDNのページの先頭に次のような記述があるので、このような記述がある場合は、やはりプラットフォームを確認しておいた方がよいと思います。

dnetplatfm2.gif