我在项目中使用了一些未签名的库。因为我的应用程序是强签名的,所以库也必须如此。
我使用以下方法签署这些库:
"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\ildasm.exe" /nobar /all /out=library.il library.dll
"%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe" /dll /key=MyKey.snk library.il
问题是任何元数据,例如版本号,都会在现在签名的 DLL 中丢失。这是一个问题,因为现在库之间的一些依赖关系被破坏了。如何在不求助于实际编译这些库的源代码的情况下保留版本号?
更新
它实际上是一个显示此问题的特定 DLL,我发现它是使用 ILMerge 构建的。也许这是造成问题的原因。需要明确的是:ILMerge 生成的 DLL 确实具有正确的元数据,只有在对其进行拆卸和重新组装后,元数据才会消失。
更新 2
我在 Reflector 中打开了 DLL,看来至少版本号还在。我一直在使用 Windows 资源管理器中的文件属性对话框/详细信息选项卡进行检查。所以我认为这是缺少的清单。