我有代码来读取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));
答案 0 :(得分:4)
不,Windows Phone 7不支持这种反射。您只能反映公共类型或内部类型(即来自同一个程序集)。微软不希望人们侵入不通过公共API直接暴露的功能。
而且......为什么要从XAP中读取XAP?这对我来说似乎没有意义。
答案 1 :(得分:1)
请记住,XAP是标准的ZIP包,因此只要您可以解压缩它,就可以访问其内部内容。
从长远来看,这对您要完成的任务没有多大帮助,因为内部Reflection功能仅限于随应用程序加载的静态库,或者可以从 GAC(全局)访问程序集缓存)。原因并不是防止黑客攻击,因为在大多数情况下反映.NET程序集不会损害操作系统(阅读this document以更好地理解安全模型)。它是为了防止动态代码加载,它将在发布应用程序时执行声明的功能之外的操作。