【问题标题】:How can I share resources across multiple projects within a C# solution?如何在 C# 解决方案中跨多个项目共享资源?
【发布时间】:2014-06-10 21:57:20
【问题描述】:

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

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

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

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

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

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

Image img = project1.Properties.Resources.image14;

这会导致 MissingManifestResourceException 崩溃。

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

【问题讨论】:

  • Alt+dragged Resources.resx...只需在项目2中添加对项目1的引用即可。
  • 我已经有参考了。但是,如果我不链接资源文件,那么我在设计时就无法访问它们(我的意思是,单击 BackgroundImage 属性并从编辑器获取资源)。
  • 我发现了一些有趣的东西...当我按照 gustavodidomenico 的建议添加参考时,我可以很好地使用上面的代码,但在设计时无法从编辑器访问资源。当我将资源链接到另一个项目时,我可以通过编辑器访问它们,但不能像上面的代码那样使用它们。

标签: c# visual-studio-2012


【解决方案1】:

刚刚按照以下步骤构建了一个示例:

  1. 创建一个类库保存资源(项目 1)
  2. 创建消费者项目(项目 2)
  3. 在项目1中添加资源文件(GlobalResources.resx),添加资源项Information
  4. 将资源文件的BuildAction改为Embedded Resource
  5. 将资源文件的Do not copy改为False
  6. 检查资源文件的Custom Tool是否设置为PublicResXFileCodeGenerator
  7. 将类库 (Project 1) 的引用添加到使用者项目 (Project2)。
  8. 在任何你想使用的地方添加资源命名空间引用。
  9. 终于成功了:GlobalResources.Information

应该很简单。

编辑:

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

但是,如果您认为收益大于努力:

Issue with shared WinForms resources across projects in Visual Studio

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

希望对你有帮助。

【讨论】:

  • 我完全按照你说的做了。现在,转到项目 2,单击以编辑窗体的 BackgroundImage,并尝试将其设置为在 GlobalResources 中找到的图形。不能这样做,因为 GlobalResources 不存在。 AFAICT,除非它实际包含在项目中(不仅仅是参考),否则它不会出现在编辑器中。这就是我链接它的原因。但是,正如我所说,如果我链接它,它会很好地显示在编辑器中,但我不能再在运行时使用它,如原始帖子所示。可以这样设置,以便我可以在设计时和运行时使用资源吗?
  • 这就是我要说的。非常感谢,gustavodidomenico!
  • 很好的语调:)。哇!
【解决方案2】:

在解决方案资源管理器中选择引用的文件,然后选择属性,然后查看“复制到输出”属性的外观。我怀疑它没有设置为“始终复制”或“如果更新则复制”,其中任何一个都应该没问题。

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

确保将其复制到MissingManifestResourceException 表示找不到资源的路径。

最后,鉴于我们 cmets 中的其他信息,我还建议您验证以下内容:

  1. 文化资源的目标。检查拼写和大小写。
  2. 构建 xml 或发布 xml 的任何文化设置。
  3. 运行此代码的主机系统的文化设置。

【讨论】:

  • 嗯,你是对的。它被设置为“请勿复制”。但改变它似乎并没有做任何事情。也许这是我的无知,但我不确定为什么将嵌入式资源文件复制到我的输出文件夹会有所帮助。
  • 我不确定我们是否在同一页面上。但异常说“找不到适合指定文化或中性文化的任何资源。确保“project1.Properties.Resources.resources”在编译时正确嵌入或链接到程序集“project2”中,或者所有附属程序集required 是可加载的并且是完全签名的。”我应该有资格,这是一个运行时错误。它编译得很好。这些是可以编译的嵌入式资源,但是我似乎无法通过生成的 Resources 对象进行访问。它们不应该在我的 bin 文件夹中。
  • 同意,附加信息表明它们是在错误的文化下编译的,或者您的计算机设置为不同的文化。资源文件是否与您的计算机选择的文化不匹配?
  • 一切都是为了中立文化。嵌入式资源在 project1 中运行良好。当我试图从 project2 中得到它时,事情就出错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
相关资源
最近更新 更多