我能否从同一解决方案中的另一个项目访问另一个项目的嵌入式资源?

5

我有一个XML文件,作为Project_A中的嵌入式资源。

我想从引用了Project_A的Project_B中访问这个嵌入式资源。

(基本上,Project_B包含单元测试,并且我使用ReSharper运行它们。)

当我在Project_B上工作时,是否可以访问Project_A的嵌入式资源?

或者一般地说,我可以从同一解决方案中的另一个项目访问另一个项目的嵌入式资源吗?

4个回答

9

是的,你可以。下面是一个示例,演示如何在.NET Framework的System.dll中获取嵌入式资源System.Timers.Timer.bmp

using (Stream stream = typeof(System.Timers.Timer).Assembly.
                           GetManifestResourceStream("System.Timers.Timer.bmp"))
{
    using (Bitmap bitmap = new Bitmap(stream))
    {
        //bitmap.Dump();
    }
}

...或获取资源名称列表:

string[] names = typeof(System.Timers.Timer).Assembly.GetManifestResourceNames();

只需将typeof(System.Timers.Timer)替换为嵌入式资源所在程序集中的类型即可。


0

Visual Studio 会自动创建嵌入资源的内部类。

该类无法从其他程序集中访问。

您可以:

  1. 将此类更改为公共类(如果您通过 Visual Studio 对资源进行进一步更改,不确定是否会生效)。
  2. 通过在 Project_A 的某个主要“全局”类中返回该类来公开此类,从而使其他“消费”代码可以访问它。

在VS2010中,#1无法工作。添加新资源会导致资源类被设置为内部。 - Dan Is Fiddling By Firelight

0
你尝试过在“表格”视图中打开嵌入式资源吗(在Visual Studio中双击Resources.resx文件),并将顶部条中的“访问修饰符”(其中放置了“字符串”,“添加资源”,“删除资源”等)更改为Public而不是internal吗?

0
你可以使用资源编辑器将整个资源集标记为公共的,但这是一个全盘接受的解决方案;如果没有手动编辑代码,每当您编辑资源时都会重新生成,您无法将单个字符串标记为公共的。一旦您将它们标记为这样,您只需要引用其他程序集即可读取它们。我几年前发现了这种技术,并用它来使常用的资源字符串对其他程序集可见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接