【问题标题】:Can I access another project's Embedded Resource from a different project in the same solution?我可以从同一解决方案中的不同项目访问另一个项目的嵌入式资源吗?
【发布时间】:2011-10-06 17:29:49
【问题描述】:

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

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

(基本上 Project_B 由单元测试组成,我使用 ReSharper 运行它们。)

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      是的,你可以。这是一个示例,如何在 .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) 替换为包含您的嵌入式资源的程序集内的类型。

      【讨论】:

        【解决方案3】:

        您是否尝试过在“表格”视图中打开嵌入资源(双击 Visual Studio 中的 Resources.resx 文件)并更改顶部条中的“访问修饰符”(“字符串”、“添加Resource”、“Remove Resource”等被放置)到Public而不是internal?

        【讨论】:

          【解决方案4】:

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

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

          你可以:

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

          【讨论】:

          • 在 VS2010 #1 中不起作用。添加新资源会导致资源类被设置回内部。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-08
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多