我有一组已经构建的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,那么如果它可以很快写入,那将是非常受欢迎的。
感谢。
答案 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代码。