Visual C # проект не запускается из-за разных версий одной и той же сборки - PullRequest
1 голос
/ 01 февраля 2011

В моем приложении c # используются два разных предварительно упакованных синтаксических анализатора, каждый из которых использует отдельную сильную версию Antlr.Runtime.dll.

Приложение выдает исключение FileLoadException, по-видимому, потому что оно правильно загрузило только одну из версийи не смог найти другой.

Каталог \ bin \ x86 \ Debug содержит только одну копию библиотеки DLL.

Обратите внимание, что я не могу использовать псевдонимы сборок, поскольку мой код напрямую не вызывает версионные сборки - они только косвенно вызываются через сборки анализатора.

Это вопрос инструктирования Visual StudioПоместите dll с разными версиями в отдельные каталоги, так как они имеют одинаковые имена?Я хотел бы избегать использования GAC, насколько это возможно.

Я прочитал много «бок о бок» и связанных с ними статей, но, похоже, ни одна из них не решает этот вопрос.

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Я ни в коем случае не эксперт SxS, но в моей компании, когда это происходит, они создают разные папки для каждой сборки и манифест для их загрузки.

0 голосов
/ 01 февраля 2011

Решил эту проблему путем перехвата 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;
};   
...