加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 如何在保留其程序集元数据的同时强烈签署外部DLL?

发布时间:2020-12-14 02:29:02 所属栏目:Windows 来源:网络整理
导读:我在项目中使用了一些未签名的库.因为我的应用程序是强签名的,所以库也必须如此. 我用以下方式签署这些库: "%PROGRAMFILES%Microsoft SDKsWindowsv7.1Binildasm.exe" /nobar /all /out=library.il library.dll"%WINDIR%Microsoft.NETFramework64v4.
我在项目中使用了一些未签名的库.因为我的应用程序是强签名的,所以库也必须如此.

我用以下方式签署这些库:

"%PROGRAMFILES%Microsoft SDKsWindowsv7.1Binildasm.exe" /nobar /all /out=library.il library.dll
"%WINDIR%Microsoft.NETFramework64v4.0.30319ilasm.exe" /dll /key=MyKey.snk library.il

问题是任何元数据(例如版本号)都会在现在签名的DLL中丢失.这是一个问题,因为现在库之间的某些依赖关系被破坏了.如何保留版本号而不需要实际编译这些库的源代码?

UPDATE

它实际上是一个显示此问题的特定DLL,我发现它是使用ILMerge构建的.也许这就是问题所在.需要明确的是:ILMerge生成的DLL确实具有正确的元数据,只有在反汇编和重组后,元数据才会消失.

更新2

我在Reflector中打开了DLL,看起来至少版本号仍在那里.我一直在使用Windows资源管理器中的文件属性对话框/详细信息选项卡进行检查.所以我认为这是缺少的清单.

解决方法

我想知道为什么会这样.我同样使用ilasm和ildasm对未签名和签名的程序集进行往返编译有很好的经验.您是否可以验证ILasm输出的元数据是否仍包含版本信息(程序集范围的底部):

.assembly ConsoleApplication1
{
  //...
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}

再次检查,它“在我的机器上工作”(使用完全相同的命令行开关).

实际上会丢失的是FileVersion属性(当你将鼠标悬停在程序集上时,你在Windows资源管理器中看到的属性.ArchiveVersion属性仍然存在并且正确.你可能会混淆两者吗?只有AssemblyVersion对绑定信息很重要.有关详细信息,请参阅此SO post.

希望我能提供帮助,否则你需要提供更多背景信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读