トップ回答者
VBの互換性について

質問
-
初めての質問で、抽象的な書き方かもしれませんが、よろしくお願い致します。
VisualBasicは初めてで、購入を検討している段階です。
1点目ですが、
VisualBasicで一度開発したアプリは、Windowsのバージョンに関わりなく、
動作するものと考えてよろしいでしょうか?
たとえば、VB2003で開発したアプリは、Win7やWin8、それ以降のOSでも、
動作可能と考えてよろしいでしょうか?
それとも、定期的に開発環境を移行させて、作り直すべきなのでしょうか?
2点目ですが、
たとえば、古い開発環境で開発したアプリを変更したいが、
その時に入手出来るOSでは、古い開発環境の動作保証がないので、最新の開発環境を使用せざるを得ない場合、
最新の開発環境には、古い開発環境で作ったアプリを、最新の開発環境にコンバートする機能が付いているのでしょうか?
以上、2点です。よろしくお願い致します。
回答
-
最新の開発環境には、古い開発環境で作ったアプリを、最新の開発環境にコンバートする機能が付いているのでしょうか?
開発環境というのはVisual Studio(以下、VS)のことですよね?
まず、基本を押さえて欲しいのですが、VSが無くてもVisual Basic(以下、VB)による開発は可能です。メモ帳でVBのソースを書き、.NET Frameworkで動作するようにコンパイルすれば良いのです(実際には現実的、かつ実用的ではありませんが)。.NET Frameworkもご存じのようにバージョン1.0から最新の4.5まであります。当然のことながら機能が拡張されてきています。ですから、上位の.NET Frameworkにしかないクラスを使用したコードは、それより下位の.NET Framework用にコンパイルすることはできません。逆もありえます。下位にあったクラスが上位で無くなるケースです。ただ、この場合は下位と互換を取るため、すぐには無くなりませんのでしばらくはそのままで動作するでしょう。
以上、何が言いたいかというと、開発環境が根本の問題ではなく、VBのソースをどの.NET Frameworkで動かすか?ということが本筋なのです。もちろん、VS自体もバージョンアップしますので、新しいVSの形式というものが存在します。この、古いVSから新しいVSへの形式変換は、自動で行ってくれます。最近のVSは、対象の.NET Frameworkを選べるようになっています。例えば、VS2008で作成したプロジェクトをVS2010に変換した後、元の.NET Framework 3.5で動作させるのか、.NET Framework 4で動作させるのか選べるようになっています。
私のところでも、VS2003で作成したプロジェクトをVS2010で扱い、.NET Framework4を対象にしてコンパイルしているケースがあります。C#のコードですが、当然、partialクラスも無い時代のソースですので、デザイン系の自動生成されたコードが入り混じっていますが、このソースを直さなくてももちろん動作しますし、直すのは無駄なことでしょう。このように、ソースの形式は古くても.NET Framework4で動いていることに着目して下さい。
また、私の経験上、.NET Frameworkがバージョンアップした際に厳しくなって、これまでコンパイルが通っていたものが通らなくなったという経験があります。そういう手直しは自動では無理でしょうから、今後もそういった手直しが発生することはあると思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2012年8月29日 2:47 追記
- 回答の候補に設定 佐伯玲 2012年9月3日 2:11
- 回答としてマーク 佐伯玲 2012年9月5日 1:34
-
1点目
VB2003で作成したアプリケーションは.NETFrameworkというクラスライブラリ上で動作します。
ですから、.NETFrameworkが動作するならばWindowsのバージョンに関わりなく動作します。
ただし.NETFrameworkにはバージョンがあり、大きくわけて1.0、1.1~3.5、4~の3パターンにわかれます。
そしてバージョンごとにOSの対応が変わります。
http://msdn.microsoft.com/ja-jp/vstudio/cc807061
VB2003ですと1.0か1.1にあたりますので上記の表で対応するOSを確認してください。
2点目
ケースバイケースとしかいえないですね。
VB2003からVB2008へのコンバートは自動的にされますが、必ずしも成功するとは限りません。
最近では仮想環境で古い環境を構築して最新のOSで動かすってこともできますよ。
デバイス周りでごちゃごちゃするアプリならきついかもしれませんが。
-
直接の回答ではありませんが、新しい開発環境が無償て提供されています。
http://www.microsoft.com/ja-jp/dev/express/default.aspx
http://www.microsoft.com/ja-jp/dev/express/default.aspx
よっぽどの理由が無い限りこれらを使わずに古い VB を選択する理由はありません。
それと VB は初学者を混乱させる機能が豊富なので C# をお勧めします。
-
皆さんが回答されていますが私の中ではどうもしっくりこないので改めて
VisualBasicで一度開発したアプリは、Windowsのバージョンに関わりなく、動作するものと考えてよろしいでしょうか?
たとえば、VB2003で開発したアプリは、Win7やWin8、それ以降のOSでも、動作可能と考えてよろしいでしょうか?
それとも、定期的に開発環境を移行させて、作り直すべきなのでしょうか?Visual Basicは.NET Framework上で動作します。.NET FrameworkはWindowsのバージョン間の差異を吸収してくれるものです。Windowsのバージョンに関わりなく動作すると言えますが、代わりに.NET Frameworkのバージョンに依存します。そして.NET Framework自体の動作するWindowsのバージョンがあります。
結局のところ、間接的にはWindowsのバージョンに依存していると言えます。例に挙げられていたVB2003の場合、.NET Framework 1.1を使用することになります。.NET Framework 1.1はWindows Server 2003に同梱されたため、サポート期限も同一のものとなり、2013/10/08までとなります。また、.NET Framework 1.1の動作OSとしてはWindows 98~Windows Vistaまでとなります。つまりWindows 7では動作しないことになります。
これとは別に.NET Framework間には後方互換があり、例えば.NET Framework 1.1で作られたアプリケーションを.NET Framework 2.0や.NET Framework 4などで動作させることも可能です。これによりVB2003で作成した.NET Framework 1.1アプリケーションがWindows 7上でも動作することになります。しかしあくまで互換機能ですので、「定期的に開発環境を移行させて、作り直す」ことを強くお勧めします。
たとえば、古い開発環境で開発したアプリを変更したいが、その時に入手出来るOSでは、古い開発環境の動作保証がないので、最新の開発環境を使用せざるを得ない場合、最新の開発環境には、古い開発環境で作ったアプリを、最新の開発環境にコンバートする機能が付いているのでしょうか?
コンバート機能が付いています。あくまで機械的にコンバートするだけですので、毎バージョンに含まれる新機能は使われないままになります。あまりにも古い機能の場合、廃止される恐れもあるので、機械的なコンバートだけでなく、常に新機能に着目したり、廃止予告されているものを確認することをお勧めします。
764さんへ:
大きくわけて1.0~1.1、2.0~3.5、4~です。1.1を2.0系列に含めるのは間違っています。あと細かい話ですがVB2003では1.0を扱えません。
# 特殊な細工をすれば扱えるような話もありましたが…VS2008以降のような切り替え機能があるわけではありません。 -
RANCRU さま よろしく。
VB の互換性についてを悩みのようで。
せっかく苦労して作ったアプリですから、環境の変化を乗り越え使い続けたいですよね。
参考になればと、投稿します。私も、別の言語で作った WinNT3.51 ~ 4.0 が対象のある程度の規模のアプリ群を持っています。 今でも現役で使用しています。
しかし、この言語は Win7 では動かず、数年前に Visual Basic (Express Edition ) を導入した経緯があります。OS も .Netframework も VB も、ある意味、あなたが作ったアプリと同じで、
ある環境を前提にプログラミングされています。
ユーザー数が多いので、数世代に渡って、互換性を維持できるように努力されています。
しかし、技術の進歩に伴い、新しい記述方法や手法が追加され、ユーザーはそれを使いたいとアップデートします。
その進歩が小さければ、下位互換は保たれるでしょうが、革新的な場合、それは無理かもしれません。
作られたアプリが重要な場合、アプリのため、あえて他をアップデートしないという選択を迫られることもあるでしょう。極論すれば、Windows も VisualBasic も、永遠に続くかどうか分かりません。
消えてなくなる事も在り得る。企業のシステムを外から見ればお分かりかと思いますが、可能な限り、ハードやソフトの環境を合わせ、数世代はメンテナンスで対応し、ある時点で、次のステップに移行する。
ご自分のアプリも同じではないでしょうか。互換性は 御自分で調べるもので、保障はありません。
問題は無い、筈で、断言ではありません。
アプリの書き方にも依存すると思います。
不具合さえ生じなければ、作り直しは必要は無いと思いますが、数世代に一回ぐらいは開発環境を別途導入して、変化を見ておく方が良い気はします。
なお、アプリとライブラリ・DLL は形こそ違え同じソースプログラムです。Express という無償のものがありますので、こちらを導入なさって弄ってみる事をお勧めします。
その中に、下位互換の説明もある筈です。 -
後方互換により、VB2003で作成した.NET Framework 1.1アプリケーションがWindows 7上でも動作することになるとの事ですが、動作しない場合も考えられますか?また、マイクロソフトさんも「動作する」と断言しているのでしょうか?
動作しない場合も十分にあり得ます。Microsoft社の表現としてはあまりはっきりは書かれていませんが、アプリケーション構成ファイルを使用して対象とする .NET Framework のバージョンを指定するを参照してください。
.NET Frameworkは毎バージョン、メモリ管理やスレッド管理などが強化されています。これにより処理が効率化され同じアプリケーションでもアクセスするタイミングが異なってくることがあります。その場合、新バージョンで動作させることによって旧バージョンでは発生しなかったアクセス違反が発生してしまう。なんてことも考えられます。
何でも無条件に動作するとまでは誰も言うことはできません。次に、VB2003で作成した.NET Framework 1.1アプリケーションとは、ライブラリやDLLも含みますか?
含みます。
ライブラリやDLLにも、ご回答頂いたような.NET Framework縛りみたいなものがあって、「定期的に開発環境を移行させて、作り直す」ことを勧められますか?
YESです。「みたいなもの」というか、ライブラリやDLLについても.NET Frameworkを使うので同じ条件になります。
他の方もお勧めされていますが、まずは無償のExpress Editionがいいかと。それとこちらも他の方と同じですが、VBよりもC#がお勧めです。
すべての返信
-
1点目
VB2003で作成したアプリケーションは.NETFrameworkというクラスライブラリ上で動作します。
ですから、.NETFrameworkが動作するならばWindowsのバージョンに関わりなく動作します。
ただし.NETFrameworkにはバージョンがあり、大きくわけて1.0、1.1~3.5、4~の3パターンにわかれます。
そしてバージョンごとにOSの対応が変わります。
http://msdn.microsoft.com/ja-jp/vstudio/cc807061
VB2003ですと1.0か1.1にあたりますので上記の表で対応するOSを確認してください。
2点目
ケースバイケースとしかいえないですね。
VB2003からVB2008へのコンバートは自動的にされますが、必ずしも成功するとは限りません。
最近では仮想環境で古い環境を構築して最新のOSで動かすってこともできますよ。
デバイス周りでごちゃごちゃするアプリならきついかもしれませんが。
-
直接の回答ではありませんが、新しい開発環境が無償て提供されています。
http://www.microsoft.com/ja-jp/dev/express/default.aspx
http://www.microsoft.com/ja-jp/dev/express/default.aspx
よっぽどの理由が無い限りこれらを使わずに古い VB を選択する理由はありません。
それと VB は初学者を混乱させる機能が豊富なので C# をお勧めします。
-
最新の開発環境には、古い開発環境で作ったアプリを、最新の開発環境にコンバートする機能が付いているのでしょうか?
開発環境というのはVisual Studio(以下、VS)のことですよね?
まず、基本を押さえて欲しいのですが、VSが無くてもVisual Basic(以下、VB)による開発は可能です。メモ帳でVBのソースを書き、.NET Frameworkで動作するようにコンパイルすれば良いのです(実際には現実的、かつ実用的ではありませんが)。.NET Frameworkもご存じのようにバージョン1.0から最新の4.5まであります。当然のことながら機能が拡張されてきています。ですから、上位の.NET Frameworkにしかないクラスを使用したコードは、それより下位の.NET Framework用にコンパイルすることはできません。逆もありえます。下位にあったクラスが上位で無くなるケースです。ただ、この場合は下位と互換を取るため、すぐには無くなりませんのでしばらくはそのままで動作するでしょう。
以上、何が言いたいかというと、開発環境が根本の問題ではなく、VBのソースをどの.NET Frameworkで動かすか?ということが本筋なのです。もちろん、VS自体もバージョンアップしますので、新しいVSの形式というものが存在します。この、古いVSから新しいVSへの形式変換は、自動で行ってくれます。最近のVSは、対象の.NET Frameworkを選べるようになっています。例えば、VS2008で作成したプロジェクトをVS2010に変換した後、元の.NET Framework 3.5で動作させるのか、.NET Framework 4で動作させるのか選べるようになっています。
私のところでも、VS2003で作成したプロジェクトをVS2010で扱い、.NET Framework4を対象にしてコンパイルしているケースがあります。C#のコードですが、当然、partialクラスも無い時代のソースですので、デザイン系の自動生成されたコードが入り混じっていますが、このソースを直さなくてももちろん動作しますし、直すのは無駄なことでしょう。このように、ソースの形式は古くても.NET Framework4で動いていることに着目して下さい。
また、私の経験上、.NET Frameworkがバージョンアップした際に厳しくなって、これまでコンパイルが通っていたものが通らなくなったという経験があります。そういう手直しは自動では無理でしょうから、今後もそういった手直しが発生することはあると思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2012年8月29日 2:47 追記
- 回答の候補に設定 佐伯玲 2012年9月3日 2:11
- 回答としてマーク 佐伯玲 2012年9月5日 1:34
-
皆さんが回答されていますが私の中ではどうもしっくりこないので改めて
VisualBasicで一度開発したアプリは、Windowsのバージョンに関わりなく、動作するものと考えてよろしいでしょうか?
たとえば、VB2003で開発したアプリは、Win7やWin8、それ以降のOSでも、動作可能と考えてよろしいでしょうか?
それとも、定期的に開発環境を移行させて、作り直すべきなのでしょうか?Visual Basicは.NET Framework上で動作します。.NET FrameworkはWindowsのバージョン間の差異を吸収してくれるものです。Windowsのバージョンに関わりなく動作すると言えますが、代わりに.NET Frameworkのバージョンに依存します。そして.NET Framework自体の動作するWindowsのバージョンがあります。
結局のところ、間接的にはWindowsのバージョンに依存していると言えます。例に挙げられていたVB2003の場合、.NET Framework 1.1を使用することになります。.NET Framework 1.1はWindows Server 2003に同梱されたため、サポート期限も同一のものとなり、2013/10/08までとなります。また、.NET Framework 1.1の動作OSとしてはWindows 98~Windows Vistaまでとなります。つまりWindows 7では動作しないことになります。
これとは別に.NET Framework間には後方互換があり、例えば.NET Framework 1.1で作られたアプリケーションを.NET Framework 2.0や.NET Framework 4などで動作させることも可能です。これによりVB2003で作成した.NET Framework 1.1アプリケーションがWindows 7上でも動作することになります。しかしあくまで互換機能ですので、「定期的に開発環境を移行させて、作り直す」ことを強くお勧めします。
たとえば、古い開発環境で開発したアプリを変更したいが、その時に入手出来るOSでは、古い開発環境の動作保証がないので、最新の開発環境を使用せざるを得ない場合、最新の開発環境には、古い開発環境で作ったアプリを、最新の開発環境にコンバートする機能が付いているのでしょうか?
コンバート機能が付いています。あくまで機械的にコンバートするだけですので、毎バージョンに含まれる新機能は使われないままになります。あまりにも古い機能の場合、廃止される恐れもあるので、機械的なコンバートだけでなく、常に新機能に着目したり、廃止予告されているものを確認することをお勧めします。
764さんへ:
大きくわけて1.0~1.1、2.0~3.5、4~です。1.1を2.0系列に含めるのは間違っています。あと細かい話ですがVB2003では1.0を扱えません。
# 特殊な細工をすれば扱えるような話もありましたが…VS2008以降のような切り替え機能があるわけではありません。 -
これとは別に.NET Framework間には後方互換があり、例えば.NET Framework 1.1で作られたアプリケーションを.NET Framework 2.0や.NET Framework 4などで動作させることも可能です。これによりVB2003で作成した.NET Framework 1.1アプリケーションがWindows 7上でも動作することになります。しかしあくまで互換機能ですので、「定期的に開発環境を移行させて、作り直す」ことを強くお勧めします。
佐祐理さんへ:
ご回答ありがとうございます。もう少し教えてください。
後方互換により、VB2003で作成した.NET Framework 1.1アプリケーションがWindows 7上でも動作することになるとの事ですが、動作しない場合も考えられますか?また、マイクロソフトさんも「動作する」と断言しているのでしょうか?
次に、VB2003で作成した.NET Framework 1.1アプリケーションとは、ライブラリやDLLも含みますか?
ライブラリやDLLにも、ご回答頂いたような.NET Framework縛りみたいなものがあって、
「定期的に開発環境を移行させて、作り直す」ことを勧められますか?
それとも、バージョンを気にしなくても使えるものですか?
すいませんが、宜しくお願い致します。
また、この場を借りて回答して頂いた764さん、galacoさん、trapemiyaさんにもお礼申し上げます。
ありがとうございました。
-
RANCRU さま よろしく。
VB の互換性についてを悩みのようで。
せっかく苦労して作ったアプリですから、環境の変化を乗り越え使い続けたいですよね。
参考になればと、投稿します。私も、別の言語で作った WinNT3.51 ~ 4.0 が対象のある程度の規模のアプリ群を持っています。 今でも現役で使用しています。
しかし、この言語は Win7 では動かず、数年前に Visual Basic (Express Edition ) を導入した経緯があります。OS も .Netframework も VB も、ある意味、あなたが作ったアプリと同じで、
ある環境を前提にプログラミングされています。
ユーザー数が多いので、数世代に渡って、互換性を維持できるように努力されています。
しかし、技術の進歩に伴い、新しい記述方法や手法が追加され、ユーザーはそれを使いたいとアップデートします。
その進歩が小さければ、下位互換は保たれるでしょうが、革新的な場合、それは無理かもしれません。
作られたアプリが重要な場合、アプリのため、あえて他をアップデートしないという選択を迫られることもあるでしょう。極論すれば、Windows も VisualBasic も、永遠に続くかどうか分かりません。
消えてなくなる事も在り得る。企業のシステムを外から見ればお分かりかと思いますが、可能な限り、ハードやソフトの環境を合わせ、数世代はメンテナンスで対応し、ある時点で、次のステップに移行する。
ご自分のアプリも同じではないでしょうか。互換性は 御自分で調べるもので、保障はありません。
問題は無い、筈で、断言ではありません。
アプリの書き方にも依存すると思います。
不具合さえ生じなければ、作り直しは必要は無いと思いますが、数世代に一回ぐらいは開発環境を別途導入して、変化を見ておく方が良い気はします。
なお、アプリとライブラリ・DLL は形こそ違え同じソースプログラムです。Express という無償のものがありますので、こちらを導入なさって弄ってみる事をお勧めします。
その中に、下位互換の説明もある筈です。 -
後方互換により、VB2003で作成した.NET Framework 1.1アプリケーションがWindows 7上でも動作することになるとの事ですが、動作しない場合も考えられますか?また、マイクロソフトさんも「動作する」と断言しているのでしょうか?
動作しない場合も十分にあり得ます。Microsoft社の表現としてはあまりはっきりは書かれていませんが、アプリケーション構成ファイルを使用して対象とする .NET Framework のバージョンを指定するを参照してください。
.NET Frameworkは毎バージョン、メモリ管理やスレッド管理などが強化されています。これにより処理が効率化され同じアプリケーションでもアクセスするタイミングが異なってくることがあります。その場合、新バージョンで動作させることによって旧バージョンでは発生しなかったアクセス違反が発生してしまう。なんてことも考えられます。
何でも無条件に動作するとまでは誰も言うことはできません。次に、VB2003で作成した.NET Framework 1.1アプリケーションとは、ライブラリやDLLも含みますか?
含みます。
ライブラリやDLLにも、ご回答頂いたような.NET Framework縛りみたいなものがあって、「定期的に開発環境を移行させて、作り直す」ことを勧められますか?
YESです。「みたいなもの」というか、ライブラリやDLLについても.NET Frameworkを使うので同じ条件になります。
他の方もお勧めされていますが、まずは無償のExpress Editionがいいかと。それとこちらも他の方と同じですが、VBよりもC#がお勧めです。