无需重新组装主程序集的其他附属程序集

时间:2019-05-16 06:49:40

标签: c# .net winforms localization satellite-assembly

我有一个使用四种语言的本地化WinForms程序。它由一个EXE和几个DLL组成。所有C#项目都包含在一个解决方案中。卫星程序集是根据本地化资源文件自动生成的,例如 Strings.fr.resx MyForm.it.resx

源代码存储在Subversion中,Subversion是Artifactory中由集中式(构建服务器)生成的二进制文件。 Maven用于依赖性解析。二进制文件(快照)的相应源代码也存储在Artifactory中。因此,二进制文件(DLL,EXE)和相应的源代码都可以从其他项目中引用。

现在,我想在不重新编译的情况下向程序添加其他语言。 不得触摸原始二进制文件

这个想法是创建一个依赖(Maven)依赖于原始程序版本的附加解决方案。因此,我获得了二进制文件和源代码。然后,我可以为每个原始项目创建工具项目,以创建附属程序集,例如使用批处理文件。这将适用于带有可本地化文本和资源文件中其他内容的项目。

但是控件和表单呢?不同的语言可能具有不同的结果控件布局,换行符,位置更改,大小等。不仅仅是语言翻译。因此,WinForms设计器将非常有帮助。有人知道创建包含控件的附属程序集的好方法吗?

无法使用其他工具(例如Sisulizer)。原始二进制文件使用强命名,并且密钥仅在构建服务器上可用。因此,新的卫星组件也必须使用该关键字来命名。

1 个答案:

答案 0 :(得分:0)

这就是我通过本地化版本进行的操作。我使用可以读取Windows Forms EXE的本地化工具(解决方案)。首先,我使用本地化工具的GUI版本来创建本地化项目文件(XML文件),该文件包含在我的仓库中。然后,在构建服务器上的构建过程中,使用本地化工具的命令行版本来扫描EXE文件。此扫描过程提取新的或更改的字符串,然后构建过程将它们发送以进行翻译。之后,构建过程将构建附属程序集文件。生成过程的输出工件是主程序集(.exe),其他一些程序集(.dll)和主要程序集和其他程序集的附属程序集(.resources.dll)。所有这些操作都是通过本地化工具的命令行版本完成的,这是正常构建过程的一部分。

对于您而言,您不想重建EXE。那样就好。您只会在构建过程中使用卫星构建部分。

通常,我使用三种构建过程(取决于项目)

1)本地

我在计算机上本地安装了本地化工具的命令行版本,并从PowerShell或Bat文件中调用它。

2)自己的构建服务器/代理

与上述相同,但是构建管道的任务会调用本地化工具的命令行版本。

3)基于云的构建

这有点棘手,因为我无法在像Azure这样的云版本上安装自己的软件。我通过将本地化工具的命令行版本(单个EXE,SoluMake.exe)包含到我的存储库中来进行此操作。在生成期间,此EXE然后可在Azure DevOps生成计算机中使用,并且生成可以使用的方式与情况1和#2相同。