我可以在同一解决方案中从另一个项目访问另一个项目的嵌入式资源吗?

时间:2011-07-16 12:03:19

标签: c# .net visual-studio embedded-resource

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

我想从Project_B中获取这个引用Project_A的嵌入式资源。

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

当我在使用Project_B时,是否可以访问Project_A的嵌入资源?

或者一般情况下,我可以在同一解决方案中从其他项目访问另一个项目的嵌入式资源吗?

4 个答案:

答案 0 :(得分:6)

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

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)替换为包含嵌入资源的程序集内的类型。

答案 1 :(得分:0)

Visual Studio为您的嵌入式资源自动创建的类是内部的。

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

你可以:

  1. 将此课程更改为公开(如果您通过Visual Studio对资源进行进一步更改,则不确定这是否会成立。
  2. 通过从Project_A中的某个主“global”类返回来展示此类,从而将其访问权限提供给其他“消费”代码。

答案 2 :(得分:0)

您是否尝试在“表格”视图中打开嵌入式资源(双击Visual Studio中的Resources.resx文件)并更改顶部条带中的“访问修饰符”(“Strings”,“Add”资源“,”删除资源“等等”放在公共而不是内部?

答案 3 :(得分:0)

您可以使用资源编辑器将整个资源集标记为公共资源,但这是一个全有或全无的解决方案。如果没有手动编辑在每次编辑资源时都会重新生成的代码,则无法将单个字符串标记为公共。一旦对它们进行了如此标记,您只需引用其他程序集即可读取它们。几年前,我发现了这种技术,并用它使其他程序集可以看到常用的资源字符串。