C# 如何将资源嵌入到另一个项目中

C# 如何将资源嵌入到另一个项目中,c#,.net,C#,.net,假设我有一个C#类库项目,它只包含作为嵌入式资源的xml文件。我想从另一个解决方案项目访问这些资源。由于“类”库不包含类,因此很难获得如下程序集: typeof(ClassName).Assembly ... 最终获得嵌入式资源。有没有一种方法可以在不需要硬编码任何神奇字符串的情况下访问嵌入式资源。?谢谢 附言: 这似乎是目前唯一可行的办法: var assembly = typeof(FakeClass).Assembly; var stream = assembly.GetManifest

假设我有一个C#类库项目,它只包含作为嵌入式资源的xml文件。我想从另一个解决方案项目访问这些资源。由于“类”库不包含类,因此很难获得如下程序集:

typeof(ClassName).Assembly ...
最终获得嵌入式资源。有没有一种方法可以在不需要硬编码任何神奇字符串的情况下访问嵌入式资源。?谢谢

附言:

这似乎是目前唯一可行的办法:

var assembly = typeof(FakeClass).Assembly;
var stream = assembly.GetManifestResourceStream("Data.Blas.xml"); 
我在“数据”程序集中创建了一个“假类”。

您可以使用从嵌入式程序集中加载xml文件

System.IO.Stream s = this.GetType().Assembly.GetManifestResourceStream("ActivityListItemData.xml"); 
编辑

您可以使用Assembly.Load()加载目标程序集并从中读取资源

Assembly.LoadFrom("Embedded Assembly Path").GetManifestResourceStream("ActivityListItemData.xml");

当我不希望项目中出现松散文件时,我发现有一种方法非常有效。它可以应用于任何部件

System.IO.Stream s = this.GetType().Assembly.GetManifestResourceStream("ActivityListItemData.xml"); 
在下面的示例中,项目根目录中有一个名为“MyDocuments”的文件夹,其中有一个名为“Document.pdf”的文件。文档被标记为嵌入式资源

您可以这样访问资源,在调用GetManifestResourceStream()之前先构建名称空间:


我发现的唯一问题是当名称空间包含“.”后面的数字时(例如MyDocuments.462)。当名称空间是一个数字时,编译器将在其前面加一个下划线(因此MyDocuments.462将成为MyDocuments._462)。

“这”将是正在执行的程序集,而不是另一个程序集,因此这不起作用!您可以使用Assembly.Load()来加载包含嵌入xml文件的程序集,然后读取它们,请参阅更新的。