C# 使用附属程序集替换.NET应用程序中的UI

C# 使用附属程序集替换.NET应用程序中的UI,c#,.net,C#,.net,在我的WindowsForms/C#/.NET应用程序开始时,我想加载我的附属程序集,并用它替换我的应用程序的外观。以类似于加载附属程序集以实现应用程序国际化的方式。除了我想打电话给你,比如: // Load it. Ignore CultureInfo, etc. UseSatelliteAssembly("mySatelliteAssembly.dll"); 我在.NET中创建了一个附属程序集,其中包含一组已编译的RESX文件。RESX文件来自我的应用程序的UI,我使用AL.EXE程序将

在我的WindowsForms/C#/.NET应用程序开始时,我想加载我的附属程序集,并用它替换我的应用程序的外观。以类似于加载附属程序集以实现应用程序国际化的方式。除了我想打电话给你,比如:

// Load it. Ignore CultureInfo, etc.
UseSatelliteAssembly("mySatelliteAssembly.dll"); 
我在.NET中创建了一个附属程序集,其中包含一组已编译的RESX文件。RESX文件来自我的应用程序的UI,我使用AL.EXE程序将它们编译成卫星程序集

我不想编写代码将附属程序集中的每个字符串复制到我的UI中

我的主程序集已签名。我的附属程序集可能不会被签名(无论如何,使用相同的密钥)。


有什么简单的方法可以做到这一点吗?

没有。您不能更改设计器,它会生成资源。ApplyResources()调用。您不能更改ComponentResourceManager类,它被烘焙到框架中


该类只有一种改变其行为的方法:Thread.CurrentThread.CurrentUICulture。使用它。在InitializeComponent()调用之前更改UI区域性,然后恢复。您可以劫持大量的文化缩写来映射到有意义的东西。

我发现了这个示例,它让我认为有一种方法可以替换ComponentResourceManager


同意。更明智的做法是遵循框架,而不是你自己的意愿。劫持文化并不能解决我问题的另一部分:我不想签署卫星DLL。这是我必须做的,因为我的EXE已经签署了。考虑切换到莫诺河,你可以制作自己的CLR版本。