Skip to content
2015/08/19 / Azulean

.NET Framework 4.6 の RyuJIT の不具合がいくつか修正されてリリースされている

先日、「.NET Framework 4.6環境でx64アプリケーションが正しく動作しないことがある」として記事にした RyuJIT ですが、2015/08/12 公開のセキュリティ更新プログラムとして一部の不具合が修正されたそうです。

 

マイクロソフト セキュリティ情報 MS15-092 – 重要
.NET Framework の脆弱性により、特権が昇格される (3086251)
https://technet.microsoft.com/library/security/ms15-092.aspx

MSDN Blog に挙がっていた不具合 は直されたみたいですが、まだ .NET 4.6 環境で実行すると動きが変わるような不具合(GitHub に登録されている不具合一例)はリリースされていません。

アプリケーションによっては引き続き正しく動作しないケースがあるということは認識しておいた方が良いでしょう。(開発者の方、社内の IT 管理の方など)

2015/08/15 / Azulean

Visual Studio 2015 のインストーラーはオンラインで最新の情報を取得している

気づいている方や知っている方もおられるかもしれませんが、Visual Studio 2015 のインストーラーはオンラインでコンポーネントの追加・更新の情報を取得しているようです。
その判断根拠の1つとしては、Visual Studio 2015 リリース時にはなかった、Windows 10 向けの開発ツールが候補に出てくるからです。

なお、そのツールがリリースされる前に Visual Studio 2015 をインストールしていた環境で、プログラムのアンインストールから「変更」を選ぶと以下のように、新着コンポーネントとして表示されます。

image

 

逆にいえば、オフライン環境でディスク、あるいはディスクイメージからインストールしようとすると後付けで足されたコンポーネントをインストールできない。
(この場合は、Web インストーラーで /layout オプションを使うとか工夫することになるのかなぁ。試せていませんが)

2015/08/10 / Azulean

.NET Framework 4.6環境でx64アプリケーションが正しく動作しないことがある

概要

.NET Framework 4.6を導入した環境、あるいは.NET Framework 4.6が標準でインストールされているWindows 10において、.NET Framework 4 ~ 4.5.2までを対象としたx64アプリケーション、.NET Framework 4.6を対象としたx64アプリケーションは期待通りに動作しないことがあります。

原因

.NET Framework 4.6を導入すると.NET Framework 4系のx64ビルドしたアプリケーションは新しいRyuJITが使用されるようになります。
しかし、このRyuJITにはネイティブコード生成の不具合、最適化の不具合がいくつか存在しており、アプリケーションが強制終了する、機能が正しく動かないといったアプリケーションの不具合を生じさせるリスクがあります。

この現象は.NET Framework 4 ~ 4.5.2までを対象にリリースした既存アプリケーションであっても、実行環境に.NET Framework 4.6を導入するか、Windows 10に既存アプリケーションをインストールすることで不具合が起きる可能性がある点、他人事とは言えない事情があります。

(Windows 10はWindows 7/8.1から無償アップグレードできるの気づかぬうちに動かなくなるとか、Visual Studio 2015インストールで勝手に入ってしまうとか)

事例情報

以下のMSDNの.NET BlogでRyuJIT最適化に関する不具合について言及されています。

RyuJIT Bug Advisory in the .NET Framework 4.6

このほか、最適化を抑制してもunsafeコードで正しくないメモリ参照を引き起こす不具合が存在しているようです。(業務的に知り得たことなので細かいことは割愛します)

対象外

以下のアプリケーションはこの問題にあたりません。

  • .NET Framework 3.5 SP1 (3.5.1) およびそれ以前を対象とするアプリケーション
  • x86指定でビルドしているアプリケーション
  • .NET Frameworkを使用していないアプリケーション

回避策

運用環境が特定少数、制御可能な範囲であれば.NET Framework 4.6をインストールしないことです。

ただ、不特定多数の市場に向けたアプリケーションの場合はそういった制御ができませんので、RyuJITを無効化することで回避することを考えます。
詳しいことはgithubのページを参照していただきたいですが、おおよそ以下の選択肢があることになります。

  1. app.configに書く。(〇〇.exeであれば、〇〇.exe.configができることになる)
    runtimeセクションに<useLegacyJit enabled="1" />を書き加える。
  2. 環境変数COMPLUS_useLegacyJitに1を設定する
  3. レジストリ(SOFTWARE\Microsoft\.NETFramework)にuseLegacyJitというDWORDの値を作り、1と書き込む。
    HKEY_LOCAL_MACHINEか、HKEY_CURRENT_USERのいずれかでよい。

これから新規に配布する、あるいはアップデートをリリースする予定のアプリケーションであれば、app.config路線が良いでしょう。これであれば、他のアプリケーションに影響を与えません。
次点として、アップデート予定がなく、エンドユーザーのフォローが必要となる場合は、HKEY_CURRENT_USERのレジストリに書くようなregファイルを作った方がユーザーサポートという観点ではやりやすいかもしれません。

回避策の有効性を確認する方法

デバッグ実行していただいて、読み込まれたDLLの一覧をVisual Studioやプロセスエクスプローラーなどで確認してください。
通常はclrjit.dllが読み込まれますが、上記の回避策を打つとcompatjit.dllが読み込まれるようになります。

2015/07/21 / Azulean

Visual Studio 2015 世代の Express や Community

使用条件の都合で Express を使わないといけない場合、2015 でも Express は引き続きリリースされています。
ダウンロードは Visual Studio の Web サイトから

上部のリンクから、ダウンロード、トップダウンロード、すべてのダウンロードとたどってください。

image

次のページの Visual Studio 2015 のリンクをクリックするとエディションの選択リンクが現れますので、お好きな Express、あるいは Community のエディションを選んでください。

image

「オフラインでインストールする方法」というリンクはありますが、「製品の登録」は Visual Studio 上で「Microsoft アカウント」によるサインインが必要。
2013 からと同じで、オフライン環境では利用できないと考えた方がよさそうです。

image

※オフライン環境での試験のため、日付を1ヶ月先に設定した状態でのスクリーンショット。

オフラインで利用できた、2012 以前の Express の登録キーの発行も終了しつつありますし、オフライン環境で経費削減目的の無償利用は今後できなくなっていくと考えた方が良いでしょう。
どうしても、オフライン環境で Visual Studio が必要なのであれば、このような制約のない、Professional 以上を買うべき時が来ていると言えるでしょう。

2015/07/21 / Azulean

Visual Studio 2015 (VS2015) の「標準」には C++ が含まれていない

先週末にリリースされた Visual Studio 2015 ですが、デフォルトのインストールオプションの「標準」には C# と VB.NET が中心となっており、C++ がインストールされない設定のようです。

image

戦略的にわからなくはないのですが、C++ が必要な方は最初からカスタムインストールを選びましょう。

image

モバイル開発(iOS, Android)もされる方は、もう少し下の方に選択肢があります。

image

なお、標準でインストールしてしまった場合、Visual C++ のプロジェクトを作ろうとしても、機能のインストールという選択肢が出てくるわけになります。

image

2015/07/04 / Azulean

Visual Studio 2005/2008/2010/2012 Express の登録キーが取得できなくなった?

[2015/08/19追記] 2010 と 2012 の登録キー発行が再開したようです。→参照

以前から Visual Studio(Visual Basic, Visual C#, Visual C++, Visual Web Developer) Express の 2005/2008 あたりは登録キーが取得できないという話が MSDN フォーラムに挙がっていましたが、最近は 2012 までのバージョンにおいて同様に取得できなくなっているようです。

具体的には、登録キーをオンラインで取得するためのボタンやハイパーリンクをクリックすると、Microsoft のホームページにたどり着き、登録キーを取得する流れが途切れています。
2010 で IE の開発者ツールで情報を見る限り、リダイレクトの過程で 404 エラーページに飛ぼうとして、さらに Microsoft のトップページにリダイレクトされているので、ページが削除されている疑いが濃厚です。
(あくまで、現時点(2015/07/04)の振る舞いを述べていますので、状況が変わる可能性はあります)

※MSDN フォーラムにおいて、取得できなくなっている事象について告知されています。

このように登録キーが取得できなくなっているので、それぞれの対処は以下のようになります。

バージョン 対処方法
2005 オフラインインストール版を利用する
Internet Archive のキャッシュ からたどれる)
2008 オフラインインストール版を利用する
http://go.microsoft.com/?LinkId=9348306
2010 方法なし
新しいバージョンへ移行することを検討する

[2015/08/19追記]
システムが復旧したことがMSDNフォーラムにて告知されている。
2012 方法なし
新しいバージョンへ移行することを検討する

[2015/08/19追記]
システムが復旧したことがMSDNフォーラムにて告知されている。
2013/2015 登録キー方式ではなく、Microsoftアカウントでのサインインが必要。
(オフラインでは登録不可)
2017 Expressは廃止されました。
個人開発者など、Communityの条件を満たす人はそちらを、企業など条件を満たさない方は有償製品を買うしかありません。

 

2005 や 2008 はオフラインインストール版で回避できるのですが、2010 からはオフラインインストール版でも登録キーが必要になっているので回避できません。
このため、現時点では 最新バージョン の Express、使用条件を満たすなら Community Edition に移行することが必要になります。
(Community Edition では企業ユースでは使えないことが多いはずですので、使用条件に注意

Express のどれを選べば良いかわからない場合

以前とは違い、言語別ではなく、目的別の構成になっています。

デスクトップアプリ開発 Express for Windows Desktop
Web アプリ開発 Express for Web
Windows ストアアプリ開発 Express for Windows

どうしても特定のバージョンが必要な場合

企業ユースなど、どうしても、過去バージョンの Visual Studio で開発することが必要な方は、Visual Studio + MSDN を購入すれば、過去バージョンの Visual Studio もダウンロードすることができるようになりますので、この機会にご検討いただいた方が良いかもしれません。

2013 からはオフライン環境では使えません

2013 の Express からは「Microsoft アカウントでサインインできる環境」が必要 となっています。
つまり、オフラインインストールはサポートされていないと考えられます。
US Forum の参考スレッド

Visual Studio がどうしてもオフライン環境で必要な場合は、有償製品を買っていただくしかなさそうです。

(もし、ビジネスとしてそういった要求が生じているのであれば、今回の旧バージョンの打ち切りという事情を考えて、「開発環境はタダで手に入る」と思わず、きちんと予算化する(費用計上する)しかないと思います、現場によっては難しいかもしれませんが…)

2017 からは Express が廃止されています

2015 の時点で「Community があるから Express を出さない」という噂がありましたが、2017 から正式に Express が廃止となりました。

個人開発者など、Community の利用条件を満たす方はそちらを使いましょう。
企業など、使用条件を満たさない方は費用をかけて Professional 以上を買うか、古い環境を使い続けるか、別のソフトウェアに移行するかの決断の時です。
(古い環境はいずれサポート終了日を迎えます。そのときまでには買うか、別のソフトウェアに移行するか考えましょう)

2014/10/05 / Azulean

Visual C++ で Windows フォームアプリケーションを作ることはすでに推奨されていない

Visual C++ 2012 の Break Changes にも書かれていたようですが、Visual C++ 2012 から Windows フォームアプリケーション関連のプロジェクトテンプレートの削除、そして以下のような内容が掲載されています。

Although we recommend that you do not create Windows Forms applications in C++/CLI, maintenance of existing C++/CLI UI applications is supported. If you have to create a Windows Forms application, or any other .NET UI application, use C# or Visual Basic. Use C++/CLI for interoperability purposes only.

つまり、「既存のメンテナンスを除いて、Windows フォームアプリケーションを C++/CLI で書くな」ということです。
「C++/CLI はネイティブ資産との相互運用目的に使う」とも書かれているので、これで C++/CLI の役割ははっきりしたと言えますね。

なお、最近、KB(Microsoft のサポート情報)にも同様のコメントが公開されています。
問い合わせがあったのかもしれませんね。

https://support2.microsoft.com/kb/3001686