如何检索嵌入的xml资源?

时间:2009-02-06 03:02:32

标签: c# asp.net resources assemblies

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

我尝试使用以下代码访问该文件,但我一直收到返回的null引用。有人有什么想法吗?

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

3 个答案:

答案 0 :(得分:6)

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

Properties.Resources.Filename

答案 1 :(得分:3)

MSDN page for GetManifestResourceStream做了这个说明:

  

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

您是否在汇编中将资源标记为“公开”?

答案 2 :(得分:0)

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

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

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

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