在构建DLL之后向DLL添加属性

时间:2014-10-29 18:46:20

标签: c# .net dll properties versioning

我有一组已经构建的C#DLL - 他们已经完成了在AssemblyInfo.cs中设置版本号的过程,它们已经由我们的配置管理团队正式构建,并且它们已归档到它们所属的位置,因此我们不会丢失已构建的DLL。

现在我必须收集这些DLL的集合并将它们打包成几个雨伞,这些雨伞可以有不同的版本。例如:

Collection1 v1.0  Collection1 v1.1  Collection2 v1.0
----------------  ----------------  ----------------
MyDll1.dll v1.0   MyDll1.dll v1.0   MyDll1.dll v1.0
MyDll2.dll v1.1   MyDll2.dll v1.2   MyDll4.dll v1.0
MyDll3.dll v1.2   MyDll3.dll v1.2   MyDll5.dll v1.1

查看每个DLL的属性,我已经看到了它的常用字段,包括文件版本和产品版本设置为各自的版本号。

我想要做的是在某处捕获集合名称和版本号,以便在打包时显示它所属的集合。同样,DLL已经构建,所以我现在无法向AssemblyInfo.cs添加任何内容。

理想情况下,这将是另一个显示在DLL的详细信息选项卡上的属性,它可以使用某些工具注入到DLL中,但我对任何Windows都不熟悉可以添加/修改这些属性的API调用。

请记住,这是针对这些DLL的内部版本,因​​此我们可以跟踪开发期间自己安装的内容;将被打包和发布的那些"真实的"将是正式建造的原始的,并且不会添加任何属性。

编辑:第三方工具将难以使用;如果它没有Windows或Visual Studio,那么如果它可以很快写入,那将是非常受欢迎的。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试Microsoft提供的ILMerge工具:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

只需创建一个包含要合并的所有自定义程序集级属性的DLL。然后运行ILMerge,将MyDll.dll指定为主程序集,将DLL作为辅助程序使用自定义属性。别忘了指定/ copyattrs flag。

可以在此处找到完整的ILMerge文档:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.doc

如果您的输入程序集已签名,您还可以选择提供.snk文件,以便您的输出程序集也会被签名。

另一种选择是使用ILdasm / ILasm工具的组合,这些工具似乎是SDK的一部分。但它需要更多的努力,因为您需要在两者之间修改IL代码。