由于同一程序集的不同版本,Visual c#项目无法运行

时间:2011-02-01 12:01:16

标签: c# visual-studio side-by-side

我的c#应用程序使用两个不同的预打包解析器,每个解析器都使用不同的强版Antlr.Runtime.dll。

应用程序抛出FileLoadException,显然是因为它只正确地加载了其中一个版本而找不到另一个版本。

< app> \ bin \ x86 \ Debug目录只包含一个dll副本。

请注意,我不能使用汇编别名,因为我的代码不直接调用版本化程序集 - 它们只是通过解析器程序集间接调用。

这是指示Visual Studio将不同版本的dll放在不同的目录中,因为它们具有相同的名称吗?我想尽量避免使用GAC。

我读过许多“并排”和相关文章,但似乎都没有解决这个问题。

2 个答案:

答案 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;
};