none
.NETFramework4.6でビルドしたアプリケーションが、4.5.2環境で動作する RRS feed

  • 質問

  • .NET Framework4.6がインストールされていない環境で、.NETFramework4.6 でビルドしたアプリケーションが動作しています。

    C#で開発した2つのアプリケーションを、.NETFramework4.6 でビルドし、.NET Framework 4.6がインストールされていない環境で実行してみたところ、一方のアプリケーションはは起動し、もう一方は起動しない(.NET Framework 4.6のインストールを促される)という現象が発生しています。

    このような現象が発生する原因をご存知の方や、思い当たることがあることがある方は、情報をいただけると幸いです。



    2015年9月18日 2:32

回答

  • .NETには基本的に互換性があり、新規に追加されたクラスライブラリを使用していなければ、同一バージョン(v2.0~v3.5やv4.0~v4.6)は動作します。

    しかし厄介なことに .NET 4.6 で Array.Empty<T>() が追加されています。空配列を作るメソッドですが、明示的に呼び出していなくてもコンパイラーが勝手にこのメソッドを使ってしまう場合があるそうです。その場合、実行時に.NET 4.6が必要になります。

    これが原因とは限りませんが一例として。

    • 回答の候補に設定 星 睦美 2015年9月28日 1:31
    • 回答としてマーク 星 睦美 2015年10月7日 7:09
    2015年9月18日 2:53
  • 特定のバージョン以上のインストールを求めるアプリケーションは、.exe.config に必要となる下限の .NET Framework のバージョンを指定する記載があるはずです。
    config ファイルを配布しなかった場合、あるいは config ファイルに該当の記載がない場合は、バージョンチェックはされず、実行時にプロパティがない、メソッドがないなどで例外が発生することになります。
    • 回答の候補に設定 星 睦美 2015年9月28日 1:31
    • 回答としてマーク 星 睦美 2015年10月7日 7:09
    2015年9月18日 14:09
    モデレータ

すべての返信

  • .NETには基本的に互換性があり、新規に追加されたクラスライブラリを使用していなければ、同一バージョン(v2.0~v3.5やv4.0~v4.6)は動作します。

    しかし厄介なことに .NET 4.6 で Array.Empty<T>() が追加されています。空配列を作るメソッドですが、明示的に呼び出していなくてもコンパイラーが勝手にこのメソッドを使ってしまう場合があるそうです。その場合、実行時に.NET 4.6が必要になります。

    これが原因とは限りませんが一例として。

    • 回答の候補に設定 星 睦美 2015年9月28日 1:31
    • 回答としてマーク 星 睦美 2015年10月7日 7:09
    2015年9月18日 2:53
  • 特定のバージョン以上のインストールを求めるアプリケーションは、.exe.config に必要となる下限の .NET Framework のバージョンを指定する記載があるはずです。
    config ファイルを配布しなかった場合、あるいは config ファイルに該当の記載がない場合は、バージョンチェックはされず、実行時にプロパティがない、メソッドがないなどで例外が発生することになります。
    • 回答の候補に設定 星 睦美 2015年9月28日 1:31
    • 回答としてマーク 星 睦美 2015年10月7日 7:09
    2015年9月18日 14:09
    モデレータ
  • 佐祐理さん、Azuleanさん、返信ありがとうございます。

    .NET 4.5.2でビルドしたときからソースコードの変更は行っていないため、両アプリケーションの

    ソースコード及び、app.configの内容を比較し、怪しいところがないか確認します。

    結果がわかり次第改めて書き込みいたします。

    2015年9月25日 0:44