0

ASP Classic アプリケーションを .Net 4.0 に移行しようとしています (4.5 も使用できます)。アプリケーションは、Javascript 拡張関数を使用して XSL 変換を実行する責任があります。ASP Classic アプリケーションは現在、MSXML 4.0 を使用して変換を実行しています。

XslCompiledTransform クラスを使用して JavaScript 拡張機能を含む変換を処理しようとすると、.Net で問題が発生します。単純な例では機能しますが、かなり広範な JavaScript ライブラリがあり、テスト ケースがますます複雑になるにつれてエラーが発生します。これらのエラーの中で最もイライラするのは構文エラーです。たとえば、.Net パーサーは関数の外側のステートメントを好まないようです。

JavaScript拡張機能の解析とコンパイルに使用されるクラスと、どこかに完全なドキュメントがあるかどうかを教えてください。また、javascript プロセッサ オブジェクトをカスタム オブジェクトに置き換えることもできます (UriResolver と同様の方法で)。

また、パーサー ルールを使用して、ファイルを表示するときに Visual Studio で JavaScript 構文エラーを強調表示することは可能ですか。Web ページなどで使用される JavaScript コードでは既にこれを行っていると確信していますが、XSLT では構文規則が異なるようです。

4

1 に答える 1

0

AFAIR XslCompiledTransformは、CodeDomを使用して埋め込みスクリプトをコンパイルします。それが機能する方法は、XslCompiledTransformがコードファイルを作成し、それがコンパイルのためにCodeDomに渡されることです。MSXMLは、CodeDomで使用されているものとは異なるJavaScriptエンジンを使用していると思います。したがって、コンパイルの問題。さらに(私がそれを見てからしばらく経ちました)、スクリプトをコンパイル可能にするためにいくつかの追加の処理が行われる可能性があります(C#のスクリプトの場合、クラスが作成され、すべての関数がこのクラスに配置されたことを覚えています)。CodeDomによって作成されたアセンブリは、変換が実行されるappdomainにロードされることに注意してください。CLRではアセンブリのアンロードが許可されていないため、これによりOutOfMemory例外が発生する可能性があります。これについては少し前にここに書きました。http://blogs.msdn.com/b/xmlteam/archive/2011/09/26/effective-xml-part-5-something-went-really-wrong-outofmemoryexception-and-stackoverflowexception-thrown-when-using- xslcompiledtransform.aspx

于 2012-10-29T04:02:24.557 に答える