在ASP.NET MVC Web应用程序中加载Silverlight库以进行反射?

时间:2009-10-01 00:34:26

标签: asp.net-mvc silverlight silverlight-3.0

这是一个非常具体的问题,但我需要将一个Silverlight应用程序库加载到我的ASP.NET MVC Web应用程序中以反映类型并构建一个供用户选择的列表。该应用程序的目的是让用户上传他们的自定义库并在“沙盒”环境中进行测试。

无论如何,经过一番挣扎,我已经在ASP.NET MVC中实现了文件上传。现在,当我尝试加载上传的程序集进行反射时,出现以下错误:

{"Cannot resolve dependency to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.":"System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"}

我在项目中添加了指定的程序集作为参考,但无济于事。

反映程序集的代码如下所示:

Assembly a = Assembly.ReflectionOnlyLoad(_toolBytecode);
        foreach (Type t in a.GetTypes())
        {
            if (typeof(BoardTool).IsAssignableFrom(t))
            {
                if (t.IsSubclassOf(typeof(NetworkTool)))
                {
                    // Loop through each attribute of the class
                    foreach (object attr in t.GetCustomAttributes(false))
                        // Check if the attribute is the one we want
                        if (attr is NetworkToolIDAttribute)
                        {
                            ReflectedTool rt = new ReflectedTool();
                            rt.ToolID = ((NetworkToolIDAttribute)attr).ToolID;
                            rt.ToolName = t.Name;
                            _tools.Add(rt);
                        }
                }
                else
                {
                    ReflectedTool rt = new ReflectedTool();
                    rt.ToolID = Guid.Empty;
                    rt.ToolName = t.Name;
                    _tools.Add(rt);
                }
            }
        }

任何帮助都会受到赞赏,或者如果你知道另一种方法,那也会很棒。如果所有其他方法都失败了,我可能最终会将沙箱启动器/容器写成一个快速的Silverlight应用程序。

提前致谢。

2 个答案:

答案 0 :(得分:0)

Silverlight是一种与.NET不同的CLR,因此组合不兼容。 Silverlight使用的“System”,“mscorlib”等与ASP.NET使用的不同。 IL格式是相同的AFAIK,因此它只是在程序集开头加上对不同程序集的引用,因此您可以直接通过IL,但Assembly类中的任何内容都会导致问题。

答案 1 :(得分:0)

这里真正的问题不是一个不同的CLR,而是一组不同的基础库(mscorlib,系统等)。所以在桌面上你就是无法打开它。您可能希望查找不依赖于LoadLibrary的relfection库。我知道Reflector做的是这样的。但我不知道是否有任何代码可用。