如何让Windows窗体设计器使用外部程序集中的资源?

Kev*_*ler 8 resources windows-forms-designer visual-studio winforms

我在我的Windows窗体项目中的控件上使用的资源文件中有一些资源(在这种情况下是图像).Visual Studio资源选择对话框不能很好地支持从资源文件中选择图像,除非它们位于特定位置,但您可以直接编辑设计器文件,这样就可以了.应用程序编译并正确运行,Windows窗体设计器足够智能,不会搞砸我手工编辑的代码.

// in an assembly named ResourceConsumer
this.button1.Image = global::ResourceConsumer.Properties.Resources.Close32x32;
Run Code Online (Sandbox Code Playgroud)

现在我想将这些资源移动到外部程序集,以便多个应用程序可以使用它们.我可以设置一个程序集来公开它的资源而没有问题(只要我使用的是Visual Studio 2008或更高版本),这样就可以了.当我更改设计器代码以从其新位置引用图像时,代码会编译并正确运行,但现在Windows窗体设计器会在生成代码时更改我的代码; 它将图像的二进制文件嵌入本地资源文件中并从那里引用它.

// ResourceProducer is an external assembly containing resources
this.button1.Image = global::ResourceProducer.Properties.Resources.Exit32x32;
Run Code Online (Sandbox Code Playgroud)

由Windows窗体设计器更改为:

this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
Run Code Online (Sandbox Code Playgroud)

Windows窗体设计器似乎理解从同一个程序集中提取资源,而不是从外部提取资源.有没有办法让Windows窗体设计器允许我使用外部程序集中的资源?

Han*_*ant 2

不,设计师不支持这一点。重要的是它的工作方式如此,否则通过卫星程序集进行本地化将无法工作。

您可以这样做,但您必须自己编写代码。与您在 Resources.Designer.cs 文件中找到的内容差不多。请考虑这是否值得付出努力,它不太可维护,并且共享资源程序集并不是一种优化。一个 TB 的磁盘不到一百美元。

顺便说一句:从来没有自己编辑 Resources.Designer.cs 文件。