这是一个非常具体的问题,但我需要将一个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应用程序。
提前致谢。
答案 0 :(得分:0)
Silverlight是一种与.NET不同的CLR,因此组合不兼容。 Silverlight使用的“System”,“mscorlib”等与ASP.NET使用的不同。 IL格式是相同的AFAIK,因此它只是在程序集开头加上对不同程序集的引用,因此您可以直接通过IL,但Assembly类中的任何内容都会导致问题。
答案 1 :(得分:0)
这里真正的问题不是一个不同的CLR,而是一组不同的基础库(mscorlib,系统等)。所以在桌面上你就是无法打开它。您可能希望查找不依赖于LoadLibrary的relfection库。我知道Reflector做的是这样的。但我不知道是否有任何代码可用。