如何检索嵌入的xml资源?

我在我的类库中添加了一个XML文件作为嵌入式资源,方法是使用Visual Studio中的项目属性访问,然后使用Resources | 添加资源| 添加现有文件…

我试图使用以下代码访问该文件,但我不断返回null引用。 有人有主意吗?

var path = Server.MapPath("~/bin/MyAssembly.dll"); var assembly = Assembly.LoadFile(path); var stream = assembly.GetManifestResourceStream("MyNamespace.filename.xml"); 

GetManifestResourceStream的MSDN页面提供了以下注释:

如果访问另一个程序集中的私有资源并且调用者没有带有ReflectionPermissionFlag.MemberAccess标志的ReflectionPermission,则此方法返回空引用(在Visual Basic中为Nothing)。

您是否在组件中将资源标记为“公共”?

我发现在Visual Studio中使用项目属性对话框的“资源”选项卡要容易得多。 然后,您通过以下方式生成对资源的强类型引用:

 Properties.Resources.Filename 

我发现这篇文章很好地解释了如何设置它: http : //www.devx.com/dotnet/Article/10831/1954

在这种情况下可能有帮助的一件事是使用不同的方法来确定嵌入资源的位置。

  • GetEntryAssembly:使用此方法引用为启动当前进程而运行的可执行文件。 为Windows窗体应用程序设置了入口程序集,但对于大多数其他应用程序(例如,Web项目),GetEntryAssembly返回’nothing’(或在C#中为null)。
  • GetExecutingAssembly:使用此方法引用执行代码所在的同一程序集。
  • GetCallingAssembly:使用此方法引用包含调用当前方法的代码的程序集。 如果编写通用代码来读取嵌入资源位于调用程序集中的共享程序集内的嵌入资源,则此方法很有用。

我个人更喜欢这种方法而不是使用“资源”选项卡,因为它允许我使用其他工具向项目添加资源以包含在编译中。 我不必使用此工具的GUI