C# 如何在多个项目的解决方案中管理图标?

C# 如何在多个项目的解决方案中管理图标?,c#,.net,visual-studio-2008,user-interface,C#,.net,Visual Studio 2008,User Interface,我的解决方案中有五个项目。它们中的每一个都使用一些图标(其中许多图标在不同的项目中是相同的),我想将它们存储在一个地方 我试图使用单独的项目来存储图标,但我失败了。 当我使用来自其他项目(包含所有图标的项目)的图标时,Visual Studio会自动将此图标复制到form.resx文件中 说明: 首先,我无法将图标(来自其他项目)附加到来自设计器的按钮上。因此,我必须转到form.designer.cs并手动将图标附加到按钮上。在这些操作之后,VS在form.designer.cs中重建了自动生

我的解决方案中有五个项目。它们中的每一个都使用一些图标(其中许多图标在不同的项目中是相同的),我想将它们存储在一个地方

我试图使用单独的项目来存储图标,但我失败了。

当我使用来自其他项目(包含所有图标的项目)的图标时,Visual Studio会自动将此图标复制到
form.resx
文件中

说明: 首先,我无法将图标(来自其他项目)附加到来自
设计器的
按钮上。因此,我必须转到
form.designer.cs
并手动将图标附加到按钮上。在这些操作之后,VS在
form.designer.cs
中重建了自动生成的零件,将我的代码替换为own,并将图标复制到
form.resx
文件中

您可以看到,该图像已复制到本地项目的资源中。在这种情况下,更改按钮的图像不足以在共享项目中仅替换我的图像(compilation.png)。我还需要在它使用的每个表单中替换它


问题:如何在解决方案中管理图标以避免重复和这一巨大不便?

您可以设计一个服务项目,为您的其他项目提供图标或其他资源。您应该在应用程序中实现如下接口:

public interface IResourceProvider
{
   Image RetrieveIcon(string key);
   //you can add other resource types here.
}
然后在一个新类中实现该接口,并将相关图标返回给传递给其方法的每个键。在这里,您需要浏览此项目的resx文件以获取请求的图标(资源)


然后在应用程序中,只需调用ResourceProvider类来优先提供所需的资源项。

我已经解决了完全相同的问题,但有一个限制。让我们看看两种可能性:

1) 您希望能够通过使用应用文件夹中的图像覆盖一个文件夹来更新所有图像。
您可以按照@Farzin Zaker的建议使用服务。该解决方案的缺点是您必须动态设置控件的图像,并且在设计模式下,您将无法看到具有正确图像的控件

2) 您想使用设计器。
在这种情况下,您必须添加这些图像作为资源。诀窍是使VS使用指定文件夹中图像的相对路径。默认情况下,VS将所有资源文件复制到projectResources文件夹中。但是,如果VS在Resources文件夹中看到“已注册”的其他文件,则VS会将其存储在.resx图像的相对路径中。因此,如果您想在两个项目中添加相同的图像,您必须:
-创建文件夹资源
-将图像添加为现有项(作为链接):在VS中,您将看到指向图像的链接,将操作设置为无

-将图像添加到项目资源部分。

这是非常奇怪的实验结果,只是为了确保当我们从设计师那里获得新图像时,所有应用程序都将在生成后更新。关于将现有项目添加为链接。我也这样做了,但是我添加了*.resource文件。这是不成功的结果,因为资源中的名称空间经常更改,项目可能会被破坏。你是说两个不同的项目试图将名称空间更改为自己的名称空间吗?完全正确!在这之后,一个项目将被编译为错误:“找不到资源bl bla bla”。。。
public interface IResourceProvider
{
   Image RetrieveIcon(string key);
   //you can add other resource types here.
}