Действительно ли возможно иметь независимые от версии ссылки DLL в классе?

Да, это возможно.

Обычный способ задания имен тестов - завершить их с помощью IT и использовать плагин maven-failsafe-plugin, чтобы они выполнялись на этапе интеграционного тестирования.

Для получения дополнительной информации о maven-failsafe-plugin смотрите Здесь .

19
задан Matthew Flaschen 14 May 2009 в 00:29
поделиться

3 ответа

У меня еще нет ответа на свой вопрос, но я использую этот ответ, чтобы регистрировать хлебные крошки, которые я нашел при поиске решения.

Я нашел несколько связанный вопрос по StackOverflow:

Скомпилируйте .DLL, не зависящую от версии, в .NET (используя манифесты?)

Однако у меня нет возможности изменить основной продукт, поэтому ответ мне не подходит.


Обновлено:

Я написал кому-то более умному, чем я, и получил ответ:

Когда вы ссылаетесь на сборку со строгим именем, по умолчанию Visual Studio добавляет полную ссылку на указанную сборку. Это означает, что он включает имя сборки, точную версию, язык и региональные параметры и токен открытого ключа. Если какая-либо информация не соответствует описанному, генерируется исключение.

Удаление строгих имен наших сборок просто не вариант. Я выиграл' Я не буду вдаваться в подробности почему, но вы можете провести небольшое исследование в MSDN.

Итак, у вас есть два варианта обходного пути для каждой версии сборок, на которые вы ссылаетесь.

  1. Вы можете делать частичные ссылки. См. Эту статью: http://msdn.microsoft.com/en-us/library/0a7zy9z5 (VS.71) .aspx .
  2. Вы можете объявить совместимые версии с перенаправлением привязки в Интернете. конфигурации. См. Эту статью: http://msdn.microsoft.com/en-us/library/433ysdt1.aspx .

В целом рекомендуется второй подход, потому что:

  • Вы можете объявить совместимые версии с перенаправлением привязки в web.config. См. Эту статью: http://msdn.microsoft.com/en-us/library/433ysdt1.aspx .
  • В целом рекомендуется второй подход, потому что:

  • Вы можете объявить совместимые версии с перенаправлением привязки в web.config. См. Эту статью: http://msdn.microsoft.com/en-us/library/433ysdt1.aspx .
  • В целом рекомендуется второй подход, потому что: 1. Вы не можете использовать частичную ссылку на сборки в глобальном кэше сборок, то есть ваш элемент управления вызовет то же исключение, если сборки находятся в GAC. 2. Вы явно указываете совместимые версии.

    4
    ответ дан 30 November 2019 в 05:15
    поделиться

    В VisualStudio - пробовали ли вы щелкнуть правой кнопкой мыши по указанной сборке (dll), а затем выбрать свойства и установить «требуется конкретная версия» (или около того)? Это может решить вашу проблему.

    Андреас

    0
    ответ дан 30 November 2019 в 05:15
    поделиться

    Это отличное решение. Это решило аналогичную проблему для меня.

    Скомпилируйте независимую от версии DLL в .NET

    В случае, если эта ссылка когда-либо прервется, ключевым моментом будет обработка события AppDomain.CurrentDomain.AssemblyResolve, как показано ниже. Событие срабатывает всякий раз, когда происходит сбой привязки сборки, поэтому вы можете разрешить его самостоятельно, устранив конфликты версий.

    using System.Reflection;
    
    static Program()
    {
        AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs e)
        {
            AssemblyName requestedName = new AssemblyName(e.Name);
    
            if (requestedName.Name == "Office11Wrapper")
            {
                // Put code here to load whatever version of the assembly you actually have
    
                return Assembly.LoadFile("Office11Wrapper.DLL");
            }
            else
            {
                return null;
            }
        }
    }
    
    7
    ответ дан 30 November 2019 в 05:15
    поделиться