我的c#应用程序使用两个不同的预打包解析器,每个解析器都使用不同的强版Antlr.Runtime.dll。
应用程序抛出FileLoadException,显然是因为它只正确地加载了其中一个版本而找不到另一个版本。
< app> \ bin \ x86 \ Debug目录只包含一个dll副本。
请注意,我不能使用汇编别名,因为我的代码不直接调用版本化程序集 - 它们只是通过解析器程序集间接调用。
这是指示Visual Studio将不同版本的dll放在不同的目录中,因为它们具有相同的名称吗?我想尽量避免使用GAC。
我读过许多“并排”和相关文章,但似乎都没有解决这个问题。
答案 0 :(得分:1)
我绝不是SxS专家,但在我的公司发生这种情况时,他们会为每个程序集创建一个不同的文件夹,并加载一个清单来加载它们。
答案 1 :(得分:0)
通过挂钩AppDomain.AssemblyResolve:
解决了这个问题AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
{
Assembly result = null;
if (e.Name ==
@"Antlr3.Runtime, Version=3.1.3.42154, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7")
result = Assembly.LoadFile(
@"C:\src\NHibernate-3.0.0.GA\lib\net\3.5\Antlr3.Runtime.dll");
return result;
};