一种解决方案(或解决方法)是在需要运行软件的机器上的全局程序集缓存(GAC)中安装这两个版本,并使用它们的强名称引用程序集。这假定程序集确实具有强名称。
如果您有多个开发人员,或者如果您计划将解决方案部署到多台计算机(例如,作为最终用户应用程序),安装到 GAC 将是一件痛苦的事情。在这种情况下,我相信(但我可能错了)您唯一的选择是将两个版本之一合并到需要该版本的程序集中。在您的特定情况下,您需要Castle.DynamicProxy2.dll将 v2.1 合并到NHibernate.dll.
您可以使用名为ILMerge的工具来合并程序集。您需要运行的命令如下所示(未经测试):
ILMerge /t:library /internalize /out:Deploy/NHibernate.dll
NHibernate.dll Castle.DynamicProxy2.dll
该开关告诉 ILMerge在输出程序/internalize集中标记第二个程序集(在本例中为城堡)中的所有类型。internal如果没有这个,当您尝试编译一个同时引用您的新NHibernate.dll版本和现成版本Castle.DynamicProxy2.dllv2.2 的项目时,您可能会遇到编译错误,因为它们将包含具有完全相同名称的类。