【发布时间】:2023-03-12 18:39:01
【问题描述】:
一组软件产品的区别仅在于它们的资源字符串、二进制资源以及它们的 Visual Studio 安装项目使用的字符串/图形/产品密钥。创建、组织和维护它们的最佳方式是什么?
即所有产品本质上都包含相同的核心功能,这些功能由图形、字符串和其他资源数据定制以形成每个产品。 假设您正在创建一组产品,如“银行家 Excel”、“园丁用 Excel”、“CEO 用 Excel”等。每个产品具有相同的功能,但名称、图形、帮助文件不同,包括模板等。
构建这些的环境是:vanilla Windows.Forms / Visual Studio 2008 / C# / .Net。
理想的解决方案应该易于维护。例如如果我引入一个新的字符串/新资源项目,我没有添加资源应该在编译时失败,而不是运行时。 (而且后续的产品本地化也应该是可行的)。
希望我错过了做这一切的明显而简单的方法。这是什么?
============ 澄清================
“产品”是指由安装程序安装并出售给最终用户的软件包。
目前我有一个解决方案,由多个项目(包括一个安装项目)组成,它构建一组程序集并创建一个安装程序。
我需要生产多个产品/安装程序,它们都具有相似的功能,它们是从同一组程序集构建的,但其中一个程序集使用的资源集不同。这样做的最佳方法是什么?
------------ 95%的解决方案-----
根据 Daminen_the_unbeliever 的回答,每个配置的资源文件可以实现如下:
- 创建一个类库项目(“Satellite”)。
- 删除默认 .cs 文件并添加文件夹(“默认”)
- 在“MyResources”文件夹中创建资源文件
- 属性 - 将 CustomToolNamespace 设置为某物 适当的(例如“XXX”)
- 确保资源的访问修饰符是“公共”。添加 资源。编辑源代码。 参考代码中的资源 作为 XXX.MyResources.ResourceName)
- 为每个产品变体创建配置(“ConfigN”)
- 为每个产品变体创建一个文件夹(“VariantN”)
- 将 MyResources 文件复制并粘贴到每个 VariantN 文件夹中
- 卸载“Satellite”项目,并编辑 .csproj 文件
- 对于每个“VariantN/MyResources”
<Compile>或<EmbeddedResource>标签, 添加Condition="'$(Configuration)' == 'ConfigN'"属性。 - 保存,重新加载 .csproj,大功告成...
这将创建一个按配置的资源文件,该文件(可能)可以进一步本地化。对于缺少资源的任何配置,都会生成编译错误消息。可以使用标准方法对资源文件进行本地化(创建第二个资源文件 (MyResources.fr.resx) 并像以前一样编辑 .csproj)。
这是一个 95% 的解决方案的原因是用于初始化表单的资源(例如表单标题、按钮文本)不能以相同的方式轻松处理 - 最简单的方法似乎是用来自卫星组装。
【问题讨论】:
-
这个问题对我来说有点不清楚。我真的建议您查看您最初的问题并使用 Visual Studio 中的技术术语重新发布,并隔离您的问题。
-
添加了说明。目前正在考虑根据构建配置编辑 .csproj 文件以包含替换资源文件。维护混乱。有人知道这是否实用吗?
-
还考虑创建一个工具来比较资源以确保两个文件中存在相同的资源集以减少回归测试...有人知道这样的工具是否存在吗?
-
如果资源丢失,95% 的解决方案会出现编译错误...现在如果我能强制表单设计器为选定的资源使用单独的资源文件...谢谢大家的帮助。
标签: c# .net visual-studio-2008