在silverlight中获取ManifestStream以加载xml文件
本文关键字:加载 xml 文件 ManifestStream silverlight 获取 | 更新日期: 2023-09-27 18:30:09
我有一个Silverlight应用程序,我正在其中执行以下操作来加载XML文件,并进一步解析它。
我已将"生成操作"设置为"嵌入资源","复制到输出目录"
我使用的代码是:
try
{
Xmlfile = XDocument.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("file.xml"));
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
我作为例外收到的消息:
值不能为null
参数名称:input
编辑
我尝试了以下操作(在WPF中),但在Silverlight中出现问题:
Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ".file.xml")
错误:
'System.Reflection.Assembly.GetName()' is inaccessible due to its protection level
您需要预先准备程序集及其子文件夹的名称,如下所示:
string assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
XDocument.Load(assemblyName + ".subfolder.file.xml");
有时不清楚子文件夹应该是什么。如果是这样的话,只需使用以下命令直接检查名称:
string[] names = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
我还没有答案,但前置的"解决方案"不适用于Silverlight 5应用程序。
如果您在Silverlight 5.0项目中编译所提供的代码,您将获得"System.Reflection.Assembly.GetName()"在编译时由于其保护级别而无法访问。
记录在案,我得到了类似的错误:
System.Reflection.Assembly.GetName();
System.Reflection.Assembly.GetEntryAssembly()
<someAssembly>.GetReferencedAssemblies()
对于另一个GetName()重载,您会得到相同的保护错误。
<someAssembly>.GetType(fullyQualifiedTypeName, false, true);
"System.Reflection.Assembly.GetType(string,bool,bool)"由于其保护级别而无法访问
我怀疑保护级别错误源于这样一个事实,即Silverlight应用程序只是部分受信任的代码,而反射本质上需要高度信任。但是,最后我只是猜测微软代码墙的背后是什么。
MSDN上或其他地方有没有一篇文章描述了C#反射相对于程序集的哪些部分在合并到Silverlight 5 web应用程序中时被禁用/保护?