最近升级的NHibernate 2.1带来了巨大的头痛情况 到表面。
似乎大多数项目默认构建为已签名的程序集。对于 示例fluentnhibernate引用密钥文件fluent.snk。
Nhibernate.search从我可以收集的内容构建unsigned并且不会构建 签名,如果您引用生成的密钥文件,则会收到错误:
引用程序集“Lucene.Net”没有强名称
这意味着像castle.activerecord这样的项目有nhibernate.search为 当你得到引用的可怕错误时,不会构建依赖项 程序集nhibernate.search没有强名称:
相当多的项目使用caslte.activerecord,所以非常重要 这构建。
有没有人知道该怎么做,因为我完全没有想法?
这是完全的疯狂。
答案 0 :(得分:16)
来源http://www.andrewconnell.com/blog/archive/2004/12/15/772.aspx
答案 1 :(得分:2)
问题是,您无法从强名称程序集中引用非强名称程序集,但您可以执行相反的操作。这就是为什么每个体面的项目都应该签名的原因。
当我遇到这个问题时,我在项目作者(或注册一个问题)上放了一行,上面的评论中有解释,当我等待修复时,我自己编译并签名。
答案 2 :(得分:1)
所有给定的答案都有严重的缺陷 - 如果有多个未签名的程序集相互依赖,它们就不起作用。您必须手动编辑IL文件以将未签名的引用更改为已签名的引用。这肯定是可能的,但容易出错。
有一种更好的方法。首先,这是我的消息来源:
第一个是指向名为StrongNaming的NuGet包的链接,它允许强烈命名程序集,它还为您处理未签名的引用! 第二部分描述了如何在没有Visual Studio的情况下下载NuGet包。
我个人使用Visual Studio使用NuGet包管理器本身下载它,但是,您始终可以直接浏览到https://www.nuget.org/api/v2/package/Nivot.StrongNaming/1.0.4.2 并下载nivot.strongnaming.1.0.4.2.zip
下载的zip(或使用NuGet时的包)中有一个tools
文件夹。找到它后,您可以轻松地将其安装为PowerShell模块。
答案 3 :(得分:0)
http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing发布了详细指南。
总之,程序如下:
ildasm
ilasm
重建/重组,这次使用密钥