繁体   English   中英

无需重新编译主程序集的附加附属程序集

[英]Additional satellite assembly without recompilation of the main assembly

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

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

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

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

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

无法使用其他工具(例如 Sisulizer)。 原始二进制文件是强命名的,并且密钥仅在构建服务器上可用。 因此,新的附属程序集也必须使用该键进行强命名。

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

在您的情况下,您不想重建 EXE。 那没关系。 您将只使用构建过程的卫星构建部分。

一般来说,我使用三种构建过程(取决于项目)

1) 本地

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

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

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

3)基于云的构建

这有点棘手,因为我无法在像 Azure 这样的云构建上安装自己的软件。 为此,我将本地化工具(单个 EXE、SoluMake.exe)的命令行版本包含在我的存储库中。 在构建过程中,此 EXE 然后在 Azure DevOps 构建机器中可用,并且构建可以使用,就像在情况 #1 和 #2 中一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM