我知道这个问题似乎回答了所有的stackoverflow和web,但我的问题是不同的。使用外部程序集:找到的程序集的清单定义与程序集引用不匹配
我想了解如何不使用GAC(老板说没有)时,我有以下设置:这两者
该项目使用的NHibernate和Antlr3.Stringtemplate 是第三方组件。 NHibernate的有Antlr3.Runtime版本3.1.3.42154 Antlr3.Stringtemplate参考具有参考Antlr3.Runtime版本3.3.1.7705
一个当对方不可用时会报错。
我尝试了绑定重定向,但这不起作用,因为publicKeyToken在版本之间不同。它最终寻找3.3.17705与公共密钥令牌匹配的3.1.3.42154版本。
在GAC工程中安装一个或两者。但是,我的老板不会让我在GAC中安装任何东西。
我也尝试把两个DLL放在BIN目录中,通过包含一个Lib项目和一个3.1.3.42154版本的文件夹。 我告诉它总是复制,所以我得到/bin/Lib/3.1.3.42154/Antlr.Runtime.dll 然后,我添加了一个探测元素来探测该目录。 这没有奏效,我得到了同样的确切错误。
如何使用引用另一个第三方程序集的第三方程序集,这两个引用都是不同的版本?
UPDATE:
System.Reflection.Assembly.LoadFile(@"Antlr3.Runtime.dll"); // 3.3.1
System.Reflection.Assembly.LoadFile(@"Antlr3.Runtime\Antlr3.Runtime.dll"); // 3.1.3
AppDomain.CurrentDomain.GetAssemblies()表明版本的应用程序域加载的,但是,它仍然错误说thta 3.1.3无法找到。
以下是从AppDomain.CurrentDomain.GetAssemblies()正好调用之前加载到代码中的错误。前两行是GetAssemblies()中的内容,第三行是错误指示丢失的内容。
{Antlr3.Runtime, Version=3.3.1.7705, Culture=neutral, PublicKeyToken=eb42632606e9261f}
{Antlr3.Runtime, Version=3.1.3.42154, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7}
Antlr3.Runtime, Version=3.1.3.42154, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7
PublicKeyToken不匹配将其杀死。重新使用最新引用的这些DLL是您剩下的所有内容。 –
是的,我正要下载NHibernate的源码并重新编译它以引用stringtemplate使用的DLL – BradLaney