最近、新しいPCを使用して、開発ツールなどを再インストールする必要がありました。PCはWindows XP(blech)を実行し、Visual Studio2010と.NETFrameworks 2.0、3.5を使用しています。 、および4.0がインストールされており、それぞれに現在のすべてのサービスパックとパッチが含まれています。WindowsXP自体も最新です(次のように言えば:-)
私が気付いた繰り返しの問題の1つは、次のダイアログです。このダイアログは、マシンがアイドル状態になった後にポップアップする傾向があります。ビット:
クラッシュは、.NET FrameworkがバックグラウンドでシステムアセンブリのNgenコンパイルを実行し、特に1つのアセンブリに到達するとクラッシュすることが原因であると思われます。
私はMSDNフォーラムでこの問題の 別の言及 を見つけました、そして提案された回避策の1つはWindows XPのデータ実行防止機能を "必須のDEPをオンにすることですWindowsプログラムおよびサービスのみ」。しかし、それはすでに私のPCで有効な設定です。
どうすればさらに診断できますか?プロセスにアタッチしようとすると、すでになくなっています。
他に提案された、または可能性のある修正はありますか?
更新:
Ngen here および here に関する詳細情報を見つけました。
コマンドプロンプトで次のコマンドを実行しました:ngen executequeueditems
..これにより、アイドル状態のバックグラウンドngenの実行を待つ代わりに、問題を確実に再現できるようになりました。
そうするとき ngen.exe
次のエントリに到達しました:
Compiling Assembly Microsoft.SqlServer.Management.MultiServerConnection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 (CLR v2.0.50727) ...
WARNING: Cannot hardbind to mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 because dependency does not have a native image (check FusLogVw for reason)
Failed to generate native code for dependent image Microsoft.SqlServer.Management.MultiServerConnection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 because of the following error: The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
...結果は次のエラーダイアログでした:
一方、ネイティブイメージの生成に失敗した他のアセンブリは、実際にはクラッシュを引き起こさず、エラーメッセージだけを引き起こしました。
したがって、これが失敗している特定のアセンブリは次のとおりです:Microsoft.SqlServer.Management.MultiServerConnection。
他に何ができますか?この時点で生成できるかどうかは特に気にしません。この迷惑な繰り返しエラーダイアログを上から止めたいだけです。私はすでに試しました:
ngen uninstall Microsoft.SqlServer.Management.MultiServerConnection
、
...しかし、「エラー:指定されたアセンブリがインストールされていません」と表示されます。
Ngenqueueからアセンブリを削除する方法はありますか?ngenはそのネイティブイメージを生成しようとさえしませんか?
SQLServerアセンブリのnGenが失敗しています。Net Framework 2.0mscorlibアセンブリをnGenする以前の試みが失敗したため。これは.Net4とはまったく関係がないので、ngenサービスを見るのをやめることをお勧めします(2と4は独自のサービスを使用します)。
それが失敗した理由については、ネット上でこれについてはそれほど多くはありません。私は見つけました MSDNフォーラムでこれ しかし-mscorlibが正しくnGenされているかどうかを確認することについて何かがそこにあります-私はそれをチェックします。
興味深いことに、SQLServerはそのスレッドでも言及されています。 2005年であり、ここで話しているバージョン10のアセンブリはSQL 2008だと思いますが、それでも何かを提供する可能性があります。
しかし、最終的にこれが私のマシンである場合、私は次のようになります。
.Net 2.0および3.0および3.5をアンインストールします(4.0もアンインストールする勇気がある場合)
NGenに失敗しているアセンブリを含むSQLServerコンポーネントをすべてアンインストールします。
。Net 3.5 sp1 redist;をインストールします。ページのさらに下の方でも参照されている hotfix があることを確認してください。
続行する前に、すべてのnGeningが完了するのを待ちます。
.Net 4をアンインストールした場合は、今すぐ再インストールしてください。
手順2で削除したSQLServerコンポーネントを再インストールします。
はい、私は知っています、ちょっと「それをオフにしてからもう一度オンにする」答え-しかし、私はそれが問題を回避しようとするよりも良いと思います。 mscorlib 2.0が正しくnGenされていない場合、tbh .Net2.0は現在の状態では実際には使用できません。また、これはnGenを試行するSQL Serverコンポーネントであるため、nGenのmscorlib v2のみが機能します(nGenのmscorlib v4は機能しません)。
mscorsvw.exe
はMicrosoftプログラムと見なすことができ、それでもDEPから利益を得ることができます。それが本当にオフになっているかどうかは、 Process Explorer で確認できます。 DEP列を追加するか、プロセスのプロパティを確認します。
Visual Studio(少なくとも私にとって)はクラッシュのデバッグにはあまり便利ではありません。考えられる原因を調べることができるように、ダンプを取得する方がよいでしょう。 drwtsn32.exe -i
を使用してデフォルトのデバッガーをインストールできます。または、学習したい場合は、 WinDBG を使用できます。これにより、クラッシュしたプログラムをより詳細に分析できます。しかし、あなたがそれに興味がなければ、これはものです...
クラッシュは、.NET FrameworkがバックグラウンドでシステムアセンブリのNgenコンパイルを実行し、特に1つのアセンブリに到達するとクラッシュすることが原因であると思われます。
代わりにngen.exe
がクラッシュしませんか? ngen.exe
が実行されていることを確認できますか?
Process Monitor を設定して、プロセス/スレッドの開始/停止のみを表示し、実行内容を確認できます。しばらく実行したままにして、デバッグウィンドウが表示されたら再度参照してください。
「重要なWindowsプログラムおよびサービスに対してのみDEPをオンにする」。
Mscorsvw.exeはサービスであるため、実際には影響しません。
どうすればさらに診断できますか?
Ngenログファイルを見てください。それらはおそらく、C:\ Windows\Microsoft.NET\Framework\v4.0.30319またはインストールしたフレームワークバージョンなどのさまざまなフォルダーにあります。
From mscorsvw.exeとは何ですか?実行を無効にする方法 :
Mscorsvw .exeは、Microsoft.NETFrameworkに関連するプロセスです。 Mscorsvwプロセスは、バックグラウンドで.NetFrameworkアセンブリをプリコンパイルするために使用されます。
Mscorsvw.exeプロセスは、.NET Framework再配布可能ファイルのインストール後に最も優先度の高いアセンブリをコンパイルする必要があり、.NET Frameworkを使用するアプリケーションをインストールしてアセンブリをコンパイルする場合にのみ、バックグラウンドで実行されます。
通常、優先度の高いアセンブリのプリコンパイルは、mscorsvw.exeプロセスによって5〜10分で実行され、コンピューターがアイドル状態のときに優先度の低いアセンブリを処理しようとします。
mscorsvw.exeの無効化または停止
- 案内する
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Windowsエクスプローラー。- 実行ボックスにcmdと入力してコマンドプロンプトを開き、Enterキーを押します。
- 次に、コマンドで上記のパスを指定して、次のように入力する必要があります。
ngen.exe executequeueditems
そしてEnterキーを押します。- ここで、プロセスがすべてのアセンブリをプリコンパイルするのを待ちます。数分後に完了します。
これで、タスクマネージャーで実行されているmscorsvw.exeプロセスがないことがわかります。
また、いつでもこのコマンドを使用して、実行を待機しているキューになっているものがあるかどうかを確認できます。
ngen queue status
そしてまた:
ngen display
キューに入れられたすべてのアイテムをクリアするには、次のようにします。
ngen /delete *
問題の原因となっているアセンブリを見つけるために、これに答えるのに役立つ可能性のあるログファイル:
C:\Windows\Microsoft.NET\Framework\<version>\ngen.log
C:\Windows\Microsoft.NET\Framework\<version>\ngen_service.log
別の注意点として、.NET Frameworks 2.0および3.5は、4.0がそれらすべての代わりになると想定されているため、必要ありません。