合并到单个程序集时获取库版本

时间:2012-03-01 14:30:39

标签: c# assemblies version

我有一个桌面应用程序,使用户可以运行十个左右的单个模块中的一个。每个模块都作为解决方案中的独立类库存在。各个模块的版本控制对用户很重要,因此我希望能够在Help-> About框中列出每个类库的版本。这非常简单,我目前通过使用下面的代码片段在AboutBox中填充richText框来实现。

this.moduleVersions.Text = "";
foreach (var kvp in mainform.moduleList)
    this.moduleVersions.Text += String.Format("{0,-20}: {1}\r\n", kvp.Key, kvp.Value.Assembly.GetName().Version.ToString());

请注意,父主窗体中的模块列表是名称和类型的字典:

public Dictionary<string, Type> moduleList = new Dictionary<string, Type>();

但这是皱纹。在发布版本中,我将所有dll混淆并合并为单个可执行文件。撇开这是否是最佳实践的问题(我知道它不是,但有令人信服的理由),问题是它打破了上面的片段,因为现在所有模块都在物理上在同一个程序集中(父主形式),它们都返回主程序集的版本。我想以某种方式执行原始程序集的版本号。这是否可能没有暴力(即硬编码版本号)?

另外,我认为它不相关,但我使用.NET Reactor进行混淆和合并。

感谢。

1 个答案:

答案 0 :(得分:0)

创建自定义属性并装饰类型。