反映Windows Phone API中的DLL(SIlverlight)

时间:2011-07-26 02:30:50

标签: .net silverlight windows-phone-7 reflection

我有代码来读取XAP并在里面反映一个DLL。这适用于Silverlight但不适用于Windows Phone 7.是否有办法执行此操作,因为AssemblyPart.Load不在Windows Phone DLL中。

谢谢,代码是:

var client = new System.Net.WebClient();
client.OpenReadCompleted += delegate(object sender, OpenReadCompletedEventArgs e)
{
    StreamResourceInfo resourceInfoDLL = Application.GetResourceStream(
        new StreamResourceInfo(e.Result, null),
        new Uri("Some.DLL", UriKind.Relative));
       AssemblyPart assemblyPart = new AssemblyPart();
       Assembly assembly = assemblyPart.Load(resourceInfoDLL.Stream);


    .
    .
};

client.OpenReadAsync(new Uri("Some.xap", UriKind.Relative));

2 个答案:

答案 0 :(得分:4)

不,Windows Phone 7不支持这种反射。您只能反映公共类型或内部类型(即来自同一个程序集)。微软不希望人们侵入不通过公共API直接暴露的功能。

而且......为什么要从XAP中读取XAP?这对我来说似乎没有意义。

答案 1 :(得分:1)

请记住,XAP是标准的ZIP包,因此只要您可以解压缩它,就可以访问其内部内容。

从长远来看,这对您要完成的任务没有多大帮助,因为内部Reflection功能仅限于随应用程序加载的静态库,或者可以从 GAC(全局)访问程序集缓存)。原因并不是防止黑客攻击,因为在大多数情况下反映.NET程序集不会损害操作系统(阅读this document以更好地理解安全模型)。它是为了防止动态代码加载,它将在发布应用程序时执行声明的功能之外的操作。