LoginSignup
3

More than 3 years have passed since last update.

【.NET Framework】supportedRuntime要素のsku属性について

Posted at

はじめに

.NET Frameworkはビルド時のバージョンと実行時のバージョンが異なっても
app.exe.configに以下の追記をすれば動作できるようになっています。

app.exe.config
<startup useLegacyV2RuntimeActivationPolicy="true|false" > 
    <supportedRuntime version="runtime version" sku="sku id"/>  
</startup>

※互換性の問題は当然アプリ側で考慮(検証)が必要です。

versionやskuに設定できる値等は公式ドキュメントをみていただくとして、
v4.0のときのskuの設定値について備忘録のために記載します。

supportedRuntime要素

なぜv4.0なのか

前提として.NET Framework4.5以上はインプレース更新となるため、
4.5以降は同居できないものと想定しています。

.NET Framework のバージョンおよび依存関係

.NET Framework 4.5 はコンピューターの .NET Framework 4 を置き換えるインプレース更新であり、.NET Framework 4.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7、4.7.1、4.7.2 は .NET Framework 4.5 のインプレース更新です。つまり、同じバージョンのランタイム バージョンを使用しますが、アセンブリのバージョンが更新され、新しい型とメンバーが含まれます。

同居ができないのにsku属性はなぜ必要なのかと思ったのがきっかけです。
(結局常に最新をみるのでは?)

結論

versionがv4.0の場合のskuは最低バージョンとなるようです。

例えば、sku=".NETFramework,Version=v4.7.2"と記載すると、
4.6.2までしか入っていないと起動時にメッセージが表示されます。

app.exe.config
<startup useLegacyV2RuntimeActivationPolicy="true" > 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>  
</startup>

自端末には既に4.7.2がインストールされていたので、
適当に4.8とかに記載してみたところ以下のようなメッセージが表示されました。

ちなみに「はい(Y)」を選択するとMSのサイトに飛ばされます。
(4.8だと4.7.2のインストールサイトに飛ばされました)

hoge.exe - This application could not be started.

This application requires one of the following versions of the .NET Framework:
.NETFramework,Version=v4.8

Do you want to install this .NET Framework version now?

はい(Y) いいえ(N)

バージョン指定できるので、
一瞬過去バージョンでも動作できるのかと迷ってしまいましたが、
インプレース更新ということを思い出して納得しました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3