0

ASP.NetプロジェクトにHTTPハンドラーがあり、ビットマップとしてレンダリングされたSilverlightユーザーコントロールに基づいて画像を作成したいと考えていました。

ただし、で、ProcessRequestXamlコントロールをインスタンス化しようとすると、次の例外が発生します。

{"'MS.Internal.JoltHelper'の型初期化子が例外をスローしました。"}

...次のスタックトレースを使用して..。

MS.Internal.JoltHelper.get_ThreadID()、MS.Internal.XcpImports.CheckThread()
、System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex、IntPtrconstructDO)
System.Windows.Controls.UserControl..ctor()、CaseCard..ctor()、C:!WORKING_FOLDER \ Trunk \ ProActive \ ProActive.UI \ CaseCard.xaml.vb:line 6、ServiceLocator.GetCard()、C :!WORKING_FOLDER \ Trunk \ ProActive \ ProActive.UI \ ServiceLocator.vb:line 20 at ProActive.Host.ImageGeneratorHandler.ProcessRequest(HttpContext context)in c:!WORKING_FOLDER \ Truck \ ProActive \ ProActive.Host \ App_Code \ ImageGeneratorHandler.cs: System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()の10行目System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)

...そして内部の例外はこれです...

{"ファイルまたはアセンブリを読み込めませんでした'System.Xml、Version = 2.0.5.0、Culture = neutral、PublicKeyToken = 7cec85d7bea7798e'またはその依存関係の1つ。システムは指定されたファイルを見つけることができません。": "System.Xml、Version = 2.0.5.0、Culture = neutral、PublicKeyToken = 7cec85d7bea7798e "}

さて、私は数ヶ月前にこのプロジェクトを継承しました、そしてそれはひどい状態にあります。私はそれを軌道に戻すために戦っていますが、どこかにいくつかの実際の問題があるので、何かが環境的に間違っている可能性があります。

そうは言っても、Silverlightはまったく異なるフレームワークで実行されるため、これが可能かどうか疑問に思い始めています。これを行うには、本当にGDI +に戻る必要がありますか?

ありとあらゆる助けを大いに感謝します。

4

1 に答える 1

1

これが機能しない理由は、ASPコードが完全な.NET Frameworkのコンテキストで実行されており、Silverligtコントロールをインスタンス化しようとしているときに、例外と同じようにSystem.Xml、バージョン2.0.5.0のアセンブリがロード可能/見つからないためです。 。

バージョンに注意してください:2.0.5.0。すべてのSilverlightコアDLLには、2.0.0.0のような「通常の」.NETバージョンではなく、このバージョンがあります。

これは偶然ではありません。Silverlightは、通常のCLRのサブセットである小さなCLRのコンテキスト内で実行されます。これは同じCLRではありませんが、ほとんどが完全に同一であり、C#ソースコードはまったく同じですが、ランタイム同一ではありません。

現時点では、SilverlightコードをASP.NETのような完全な.NETベースのコードと混合することはできません。

共有を改善するために、通常の.NETとSilverlight(実際にはいくつかのライブラリ)の共通コアを抽出するためにMicrosoft内でいくつかの作業が行われていますが、それはまだ公開されていません。

また、Silverlight 4.0ライブラリの1つのソースコードがSilverlight固有のコードを使用していない場合、それを通常の.NETプロセスに読み込むことはできますが、その逆は明らかに不可能です(Silverlightはサブセットであり、その逆ではありません)。その周り)。

これはさておき、あなたは次の方法であなたの目標を達成するかもしれません:

  1. サーバー上でSilverlightアプリOOBを実行し、IPCメカニズムを介してASP.NETページと通信する
  2. コードをWPFに再コンパイルし、それをロードします。私が再コンパイルと言うとき、Silverlight UIはWPFの純粋なサブセットではないため、実際には適応/リファクタリングを意味します

どちらも特別なことは簡単ではありませんが、私は2番目のオプションに傾倒します。

于 2010-12-01T11:31:25.480 に答える