2009-05-28 14 views
1

私はこの時点で何百ものコンピュータではなく、何百ものコンピュータで使用されているWPF .NET 3.5 SP1アプリケーションを使用しています。アプリケーションは起動時に読み込まれるツリー構造をXMLに格納します。私はシリアル化を介してXMLをロードしようとすると、ブーム。 1つのエンドユーザマシンでのみ発生します。彼は管理者権限、ディスク容量、メモリなどを豊富に持っています。CS2000:予期せずコンパイラの初期化に失敗しました

マシンの問題やウイルス対策/スパイウェアとして無視して、IT部門を巻き込む前に(私は苦労しています)、これを追跡し、より多くの情報を得るためのよりよい方法です。 XmlSerializationは黒い菱形なので、私は開発者としてはるかに多くのことがあるとは確信していません。または私はできますか?

以下のすべてのヒントをお待ちしております。

一時クラス (結果= 1)を生成できません。エラーCS2000:コンパイラ 予期しない初期化に失敗しました - ' この操作を完了するのに十分な記憶域が利用できません。彼は、%TEMP%はそのマシン上を指している管理者権限を持っているにもかかわらず「

Stack Trace: 

    at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) 
    at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) 
    at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) 
    at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace) 
    at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace) 
    at System.Xml.Serialization.XmlSerializer..ctor(Type type) 
    at Internal.Objects.TreeSetItemManager.LoadTreeItems(String fileName) in TreeSetItemManager.cs:line 41 
    at SPA.Windows.MasterWindow.OnInitialized(EventArgs e) 
5/28/2009 10:16:20 Message: 
External component has thrown an exception.Details: 
    at MS.Win32.UnsafeNativeMethods.ITfThreadMgr.Activate(Int32& clientId) 
    at System.Windows.Input.TextServicesContext.RegisterTextStore(DefaultTextStore defaultTextStore) 
    at System.Windows.Input.DefaultTextStore.get_Current() 
    at System.Windows.Input.TextServicesContext.SetFocusOnDefaultTextStore() 
    at System.Windows.Input.InputMethod.EnableOrDisableInputMethod(Boolean bEnabled) 
    at System.Windows.Input.TextServicesManager.Focus(DependencyObject focus) 
    at System.Windows.Input.KeyboardDevice.ChangeFocus(DependencyObject focus, Int32 timestamp) 
    at System.Windows.Input.KeyboardDevice.TryChangeFocus(DependencyObject newFocus, IKeyboardInputProvider keyboardInputProvider, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed) 
    at System.Windows.Input.KeyboardDevice.Focus(DependencyObject focus, Boolean askOld, Boolean askNew) 
    at System.Windows.Input.KeyboardDevice.Focus(IInputElement element) 
    at System.Windows.Interop.HwndKeyboardInputProvider.FilterMessage(IntPtr hwnd, Int32 message, IntPtr wParam, IntPtr lParam, Boolean& handled) 
    at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
    at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
    at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) 
    at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) 

答えて

1

更新。

問題はCiscoのSecurity AgentソフトウェアとXenocodeによって実行される難読化との競合であった。どちらか一方が式から削除されても、例外は発生しません。また、私はそれを回避するためにいくつかの方法を試しましたが、無駄です。だから私はXenocodeへの問い合わせを受けている(シスコとのコミュニケーションは時間の無駄だった)。たぶん、彼らは何が起こっているのかを知ることができます。

1

?手動でファイルを作成/削除することはできますか?

次に、後続のマシンではなく、故障しているマシンのメモリはどれくらいですか?

+0

+1最初の提案では、私は一時的なフォルダのアクセス許可に無数の時間前に問題がありました。 – Blindy

+0

いいえ、投稿前にtempを確認し、彼に完全な管理者権限を明示的に与えました。空きメモリは、両方のマシンで〜1GBです。 – billb

0

ヒント:.NETコンパイル済みトランスフォームを使用するXSLTのmsxsl:scriptタグでも同様の問題がありました。報告したエラーは、シリアライザのコンパイルメソッドで発生することに注意してください。

ディスク容量とアクセス権を確認しましたが、プロセスユーザーがadmin、example、asp.netプロセスではない可能性があります。

警告:Microsoft .NET XslCompiledTransformクラスは、msxsl:scriptが使用されているときにいくつかの問題を引き起こします。 XslCompiledTransformは一時フォルダにDLLを作成し、メモリにロックします。

  1. ASP.NETプロセスは一時フォルダにアクセスできない可能性があり、XSLTは失敗します。
  2. 一時DLLは一時的なものではなく、msxsl:scriptを使用するすべてのトランスフォームに対して1つのDLLを保持します。最終的にサーバーのハードドライブは容量に満ちています。
  3. DLLがメモリにロックされているため、重大なメモリリークが発生します。

msxsl:script WITH Microsoft .NET XslCompiledTransformクラスを使用しないでください。その代わりに、拡張オブジェクトを使用して、XSLT外のC#またはVB.NETメソッドを呼び出します。 XSLT Extension Objectsに関するMicrosoftのドキュメントを参照してください。

http://dev.ektron.com/kb_article.aspx?id=482

+0

ユーザはadminです。一時フォルダにadmin permsがあります。これはASP.NETではなくWPFです。 – billb

+0

XslTransformはその問題とは関係ありません。一時的なシリアル化アセンブリを生成しようとすると失敗します。 –

+0

ありがとうございます - msxsl:script - DOHからXslCompiledTransformを使用しています! – user17541

1

あなたは(sgen.exeまたはプロジェクトのプロパティの[ビルド]ペインのオプションを使用して)は、XMLシリアル化アセンブリを事前に生成し、アプリでそれらを解放しようとすることができます。そうすれば、実行時に生成する必要はなく、その例外は発生しません。

+0

私はこの考えが好きです。あなたは "シリアル化アセンブリを生成する"設定を指していますか?それを "On"に設定しようとしていますか?私はそれを試み、月曜日にそれをエンドユーザーに与え、何が起こるか見る。ありがとうございました。 – billb

+0

はい、これが私の話です。余分な利点:それは速くなります;) –

+0

私は確かにあなたがそれを持っていたと思ったが、運がない。彼はまだ同じエラーを取得します。これは厄介です。私は今週彼らのIT関係者と会いたいと思っています。私はそれがAVやその他のソフトウェアが侵入していることを強く疑う。私はちょっとしたデバッグや情報収集をしてからシステムの異常にまで挑戦したいと思っていました。 – billb

0

「この操作を完了するのに十分な記憶域がない」というエラーメッセージが表示された場合、問題は、XMLファイルを含む場所の領域が不足しているか、アクセス許可がないためではありません。私の推測では、一時的なアセンブリの中間ファイルが破棄されている一時的な場所が実際に問題の原因になっているということです。

.NETのXmlSerializationは、コード生成を使用してC#ソースコードを作成します(最終的にCodeDomの一部であるCSharpCodeProviderを使用します)。CodeDomはコマンドラインcsc.exeコンパイラと非常によく似ているため、最終的なアセンブリが生成される前に、中間オブジェクトファイルをディスク上に作成する必要があります(メモリ内アセンブリであるかどうかにかかわらず)。

これらの一時ファイルがどこに配置されているかを確かめ、そのドライブには十分なスペースがあります。問題を抱えているユーザーに、クォータを使用したように、これらの一時ファイルが生成されている領域クォータがないことを確認します。これによってストレージ領域の例外が発生する可能性もあります。これらのファイルの一時的な場所は、アプリケーションの.configファイル内のXmlSerializerSectionを使用して構成できます。したがって、実際に領域に問題がある場合は、十分な領域があるドライブに一時的にリダイレクトすることができます。

0

調査の結果、「記憶領域」では、ディスク領域ではなくプロセスとして というメモリが参照されていることが示唆されています。

XmlSerializerがC#コードからメモリ内にアセンブリを作成すると、その場所が開始される可能性があります。調査対象の一部には次のものが含まれます:

  • XMLオブジェクトグラフは大きいですか? (シリアル化の場合は、デシリアライゼーションではなく問題が存在する場合に問題が発生する可能性が高いと認めます)
  • このワークステーションのメモリ構成に関して珍しいことはありますか?他にも多くのプロセスが実行されているか、仮想メモリが残っていないか、その他の異常な圧力がありますか?

いずれにせよ、事前設定された構成スタイルのデータであれば、事前にXMLをプレコンパイルするための+1として利用できます。

+0

これは、おそらく20Kほどの小さなファイルです。 – billb

1

this MSDN articleには、.NET Framework SDKの修復または再インストールが必要です。あなたはそれを試して、それが役立つかどうか確認できますか?

+0

私は何かを試してみます。 heh。しかし、それは1つの組織内の全員に起こります。だから私はまだそれが自分の環境にあるものだと思っています。残念ながら、私は次の1時間ほどで回答を受け入れる必要があります。私はどちらが分からない。いくつかの合理的な提案があり、いずれも問題を解決していませんでした。だから、 – billb

関連する問題