【问题标题】:Adding properties to DLL after it's been built在构建 DLL 后向 DLL 添加属性
【发布时间】:2014-10-29 18:46:19
【问题描述】:

我有一组已经构建的 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 一起提供,那么如果它是可以非常快速编写的东西,那将是首选。

谢谢。

【问题讨论】:

    标签: c# .net dll properties versioning


    【解决方案1】:

    你可以试试微软提供的ILMerge工具:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

    只需创建一个包含您要合并的所有自定义程序集级属性的 DLL。然后运行 ​​ILMerge,将 MyDll.dll 指定为主要程序集,将具有自定义属性的 DLL 指定为次要程序集。不要忘记指定 /copyattrs 标志。

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

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

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

    【讨论】:

    • 哦。对不起,我忘了提到第三方工具将很难获得批准。我更新了原始问题以澄清。谢谢。
    • 微软几乎没有资格成为第三方
    • 好的。尚未列入已批准工具列表、未预装在 Windows 中以及未随 Visual Studio 提供 CD/DVD 的其他工具将很难获得批准。
    猜你喜欢
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多