如何在C#解决方案中跨多个项目共享资源?

时间:2014-06-10 21:57:20

标签: c# visual-studio-2012

我在解决方案中有多个项目,我希望他们共享一个图形资源池。我试过这个:

1 - 创建了project1,使其资源文件公开,为其添加了一些图形。

2 - 创建了project2,Alt +将Resources.resx从project1 \ Properties拖到project2(不在Properties文件夹中)

3 - 将project2中的引用添加到project1

因此,现在project1中的所有图像都可以在project2中使用。到现在为止还挺好。我可以在设计时使用它们就好了。

但是,当我想在运行时访问它们时,我会尝试这个(在project2中)......

Image img = project1.Properties.Resources.image14;

与MissingManifestResourceException崩溃。

我在这里做错了什么?有没有更好的方法来解决这个问题?我试图做的就是将我的所有图形保存在一个地方,所以如果我添加一个资源,它就可用于解决方案中的所有项目。

2 个答案:

答案 0 :(得分:3)

按照以下步骤构建示例:

  1. 创建类库执行保存资源(项目1)
  2. 创建消费者项目(项目2)
  3. 在项目1中添加资源文件(GlobalResources.resx)并添加资源项Information
  4. 将资源文件的 BuildAction 更改为嵌入式资源
  5. 将资源文件的不要复制更改为错误
  6. 检查资源文件的自定义工具是否设置为 PublicResXFileCodeGenerator
  7. 将类库(项目1)的引用添加到使用者项目(Project2)。
  8. 在您想要使用它的任何地方添加资源命名空间参考。
  9. 最后它正在运作:GlobalResources.Information
  10. 应该很简单。

    修改

    您担心在设计时属性编辑器中使用外部资源文件。很抱歉,没有标准支持:(

    但是,如果你认为好处大于努力:

    Issue with shared WinForms resources across projects in Visual Studio

    How do I get the Windows Forms Designer to use resources from external assembly?

    希望它有所帮助。

答案 1 :(得分:0)

在解决方案资源管理器中选择引用的文件,然后选择属性,然后查看"复制到输出的内容"财产看起来像。我怀疑它设置为" Copy Always"或者"复制如果更新"哪一个都应该没问题。

复制后,我们也会检查它的复制位置。该特定项目的输出路径是否与程序最终期望的相同?它被复制到正确项目的bin \ Debug吗?

确保将其复制到MissingManifestResourceException无法找到资源的路径。

最后,在我们的评论中提供了其他信息,我还建议您验证以下内容:

  1. 文化资源定位。检查拼写和大小写。
  2. 构建xml或发布xml的任何区域性设置。
  3. 运行此代码的主机系统的文化设置(s?)。