2010-03-04 64 views
0

在我的WindowsForms/C#/ .NET應用程序的開始處,我想加載我的衛星程序集並使用它來替換我的應用程序的外觀和感覺。類似於如何加載衛星組件以使應用程序國際化。除了我只是想能夠這樣打電話:使用衛星程序集代替.NET應用程序中的UI

// Load it. Ignore CultureInfo, etc. 
UseSatelliteAssembly("mySatelliteAssembly.dll"); 

我在.NET中創建了一個包含一堆編譯的RESX文件的衛星程序集。 RESX文件來自我的應用程序的用戶界面,並使用AL.EXE程序將它們編譯成衛星程序集。

我不想編寫代碼將衛星程序集中的每個字符串複製到我的UI中。

我的主要程序集已簽名。我的衛星組件可能不會被簽名(無論如何,都有相同的密鑰)。

有沒有簡單的方法來做到這一點?

回答

2

不可以。您不能更改設計器,它會生成resources.ApplyResources()調用。你不能改變ComponentResourceManager類,它被烘焙到框架中。

該類只有一種方式來改變它的行爲:Thread.CurrentThread.CurrentUICulture。用它。在InitializeComponent()調用之前更改UI文化,之後再進行恢復。大量的文化縮寫,你可以劫持映射到一些有意義的東西。

+1

同意。遵循框架更聰明,而不是你自己的意願。 – 2010-03-04 04:43:17

+0

劫持文化並不能解決我的問題的其他部分:我不想簽署附屬DLL。自從我的EXE簽名以來,我必須這樣做。 – 2010-03-04 06:02:12

+0

考慮切換到單聲道,您可以製作您自己的CLR版本。 – 2010-03-04 12:11:59

相關問題