Как добраться C#.Net сборка по имени?



есть что-то вроде:



AppDomain.CurrentDomain.GetAssemblyByName("TheAssemblyName")


Так что вместо того, чтобы зацикливаться AppDomain.CurrentDomain.GetAssemblies(), мы могли бы просто получить конкретную сборку.

502   5  

5 ответов:

вы пробовали смотреть на сборка.Нагрузка.(..)?

Я решил с LINQ

Assembly GetAssemblyByName(string name)
{
    return AppDomain.CurrentDomain.GetAssemblies().
           SingleOrDefault(assembly => assembly.GetName().Name == name);
}

Это зависит от того, что вы пытаетесь достичь.

Если вы просто хотите получить сборку, то вы должны вызвать System.Reflection.Assembly.Load() (Как уже указывал). Это связано с тем, что .NET автоматически проверяет, была ли сборка уже загружена в текущий домен приложения, и не загружает ее снова, если она была.

Если вы просто пытаетесь Регистрация была ли сборка загружена или нет (по какой-то причине диагностики, возможно), тогда вам нужно выполнить цикл все загруженные сборки.

еще одна причина, по которой вам может понадобиться цикл, - это если вы знаете только часть информации о сборке (например. вы не уверены в версии). То есть, вы знаете достаточно, чтобы "распознать его, когда вы его видите", но недостаточно, чтобы загрузить его. Однако это довольно неясный и маловероятный сценарий.

для тех, кому просто нужно получить доступ к метаданным сборки (версия и т. д.) проверьте сборку.ReflectionOnlyLoad (name), который способен загружать только метаданные, возможно, экономя на памяти и IO.

взгляните на систему.Отображение.Класс сборки, в частности метод Load: MSDN

Comments

    Ничего не найдено.