0

我在一个 ASP.Net 项目中有一个 HTTP 处理程序,并希望生成一个基于 Silverlight 用户控件呈现为位图的图像。

但是,在 中ProcessRequest,当我尝试实例化任何 Xaml 控件时,出现以下异常......

{“'MS.Internal.JoltHelper' 的类型初始化程序引发了异常。”}

...使用以下堆栈跟踪...

在 MS.Internal.JoltHelper.get_ThreadID() 在 MS.Internal.XcpImports.CheckThread()
在 System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex, IntPtr constructDO)
在 System.Windows.Controls.UserControl..ctor() 在 CaseCard..ctor() 在 C:!WORKING_FOLDER\Trunk\ProActive\ProActive.UI\CaseCard.xaml.vb: 第 6 行 ServiceLocator.GetCard() 在 C :!WORKING_FOLDER\Trunk\ProActive\ProActive.UI\ServiceLocator.vb: 第 20 行,位于 c:!WORKING_FOLDER\Trunk\ProActive\ProActive.Host\App_Code\ImageGeneratorHandler.cs 中的 ProActive.Host.ImageGeneratorHandler.ProcessRequest(HttpContext context):第 10 行在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,布尔&完成同步)

......内部的例外是这个......

{"无法加载文件或程序集 'System.Xml, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' 或其依赖项之一。系统找不到指定的文件。":"System.Xml, Version= 2.0.5.0,文化=中性,PublicKeyToken=7cec85d7bea7798e"}

现在,..我几个月前继承了这个项目,它“状况糟糕”。我正在努力让它重回正轨,但在某个地方存在一些真正的问题,所以完全有可能出现环境问题。

也就是说,我开始怀疑这是否可能,因为 Silverlight 运行在一个完全不同的框架上。我真的必须回到 GDI+ 才能完成这项工作吗?

非常感谢任何和所有帮助。

4

1 回答 1

1

这不起作用的原因是因为您的 ASP 代码在完整的 .NET 框架的上下文中运行,并且在尝试实例化 Silverligt 控件时 - 就像异常所说的那样 -System.Xml无法加载/找到版本为 2.0.5.0的程序集.

注意版本:2.0.5.0。所有 Silverlight 核心 DLL 都有这个版本,而不是像 2.0.0.0 这样的“普通”.NET 版本。

这绝非偶然 - Silverlight 在小型 CLR 的上下文中运行,小型 CLR 是常规 CLR 的子集。它不是同一个 CLR,尽管其中大部分是完全相同的,而且您的 C# 源代码完全相同,但运行时并不相同。

目前,您不能将 Silverlight 代码与完整的基于 .NET 的代码(如 ASP.NET)混合使用。

Microsoft 内部正在进行一些工作,以提取常规 .NET 和 Silverlight(实际上是几个库)的共同核心以更好地共享,但这尚未公开。

另请注意,如果您的 Silverlight 4.0 库之一的代码不使用 Silverlight 特定代码,您可以将其加载到常规 .NET 进程中,但显然不可能反过来(Silverlight 是子集,而不是其他方式大约)。

除了所有这些,您可以通过以下方式实现您的目标:

  1. 在服务器上运行您的 Silverlight 应用程序 OOB 并通过一些 IPC 机制与 ASP.NET 页面进行通信
  2. 将代码重新编译到 WPF 中并加载它;当我说重新编译时,我的意思是适应/重构,因为 Silverlight UI 不是 WPF 的纯子集

两者都不是特别容易,尽管我倾向于第二个选项,它更干净。

于 2010-12-01T11:31:25.480 回答