Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как использовать перенаправление привязки сборки для игнорирования номеров ревизий и сборок

Автор вопроса: Anthony DОтветов: 2

У меня есть несколько приложений .NET на C #, а также API для доступа к базе данных. Я хочу поместить все версии API в базу данных и попросить их выбрать самую высокую версию и номер сборки, но придерживаться старшего и младшего номеров, с которыми они были построены. Обычно, когда я ссылаюсь на API 1.2.3.4, я хочу, чтобы ссылка читалась 1.2.*.*, чтобы приложения просто принимали 1.2.3.5 Я вижу, что могу сделать это с помощью файлов конфигурации XML. Я бы предпочел, чтобы это соблюдалось. Подобно политике публикации, но без дополнительных файлов. Я мог согласиться на это. Другая проблема - все решения, которые я вижу, перенаправляют одну версию на другую конкретную версию, а не только на любую более новую версию.

Как мне это сделать?

Может ли кто-нибудь указать мне источник информации о политике издателя?

referenceassemblies

Ответы

Ответ 1 · рейтинг 30 · Don Kirkby

Благодаря предложению Леппи использования события AppDomain.AssemblyResolve , Мне удалось решить аналогичную проблему. Вот как выглядит мой код:

    public void LoadStuff(string assemblyFile)
    {
        AppDomain.CurrentDomain.AssemblyResolve +=
            new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        var assembly = Assembly.LoadFrom(assemblyFile);

        // Now load a bunch of types from the assembly...
    }

    Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var name = new AssemblyName(args.Name);
        if (name.Name == "FooLibrary")
        {
            return typeof(FooClass).Assembly;
        }
        return null;
    }

Это полностью игнорирует номер версии и заменяет уже загруженную библиотеку на любую ссылку на библиотеку с именем "FooLibrary". Вы можете использовать другие атрибуты класса AssemblyName, если хотите быть более строгими. FooClass может быть любым классом в сборке FooLibrary.

Ответ 2 · рейтинг 5 · leppie

AppDomain.AssemblyResolve событие должно помочь.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы