无法获取StrongNameKeyPair的公钥

Zde*_*nek 6 .net fluent-nhibernate

我将开发移植到另一台计算机,如果我运行项目,我有这个例外:

无法获取StrongNameKeyPair的公钥.

HibernateException:创建代理实例失败

在原始计算机上它可以正常工作没有问题

我在google上发现它有一些加密的问题,我应该尝试"sn -m n",我不知道如何.sn.exe在更多的文件夹中,我尝试从命令行运行一些但它写道:

无法打开注册表项 - 无法格式化错误消息00000005

我不知道问题是因为NHibernate与否,还有更多类似的whitch对话框,它只在一种情况下抛出此异常.

有部分代码whitch抛出异常:

public IList<DTO> GetAll(GridSortOptions sortOptions, DTOListModel<DTO> listModel)
{
    return GetAllCriteria(sortOptions, CreateCriteria(), listModel).List<DTO>();
}
Run Code Online (Sandbox Code Playgroud)

解决方案中没有一个项目使用签名.我不明白这些错误究竟意味着什么以及我应该寻找什么.

Dud*_*001 7

NHibernate动态创建.NET程序集(动态代理)并需要对它们进行签名.默认情况下,Windows操作系统将加密密钥存储配置为计算机级别,并将密钥存储在C:\ Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys中.您的用户很可能可以在此文件夹中创建(例如)文本文件,但不能删除它,因为您没有完全控制权.

你的选择是

  1. 通过修改可能不建议的权限,完全控制C:\ Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys.

  2. 通过从Windows SDK运行"sn.exe -m n",将加密密钥存储更改为用户级别. http://msdn.microsoft.com/en-us/library/k5b5tt23(v=VS.90).aspx 这会将加密密钥库置于您的用户本地配置文件下,您应始终对其进行完全控制.

在线有几篇文章描述了类似的问题.例如,请参阅http://support.targetprocess.com/Default.aspx?g=posts&t=305.