Как получить пространства имен сборки, а не ее зависимости? - PullRequest
0 голосов
/ 27 августа 2018

Как получить пространства имен сборки, а не ее зависимостей?

Например, если я получу пространства имен, используя

assembly.GetTypes().Select(t => t.Namespace).Where(n => n != null).Distinct() 

Разве я не получил бы пространства имен зависимостей этой сборки?

Как мне отличить 2?

Я загружаю сборку через Assembly.LoadFrom (путь) и понимаю, что она автоматически загружает зависимости сборки. Для решения, я должен загрузить сборку так, чтобы зависимости не загружались? Если да, то как мне это сделать?

Кроме того, я не имею никакого контроля над созданием сборки, как, например, добавление пустого класса и т. Д.

РЕДАКТИРОВАТЬ: исправление примера

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Assembly.LoadFrom() не загружает зависимости сборки, поэтому ваш код, как он есть, будет делать именно то, что вы хотите.

Теперь давайте представим, что он загружает зависимости; еще раз: это не .

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

types
    .Where(x => x.GetName().Name == "Your.Assembly.Name")
    .Select(t => t.Namespace)
    .Where(n => n != null)
    .Distinct()
0 голосов
/ 27 августа 2018

Загрузка сборки «загружает» все зависимые сборки в память, но объект Assembly , с которым вы имеете дело, относится только к сборке, которую вы явно загружаете, поэтому вызывается GetTypes загружает только типы, определенные в этой сборке .

Так что, если вы получаете пространства имен, которые вы не ожидаете, это потому, что имеют типов в этой сборке в пространстве имен (типы в пространстве имен не все должны содержаться в одной сборке)

0 голосов
/ 27 августа 2018

System.Linq.Expressions на самом деле EntityFramework.dll.

В частности, следующие классы находятся в этой DLL под этим пространством имен:

  • System.Linq.Expressions.EntityExpressionVisitor
  • System.Linq.Expressions.Internal.Error
  • System.Linq.Expressions.Internal.ReadOnlyCollectionExtensions

Кроме того, вы также должны видеть System.ComponentModel.DataAnnotations, потому что EntityFramework.dll определяет класс System.ComponentModel.DataAnnotations.Schema.IndexAttribute.

** Обратите внимание, я проверяю EntityFramework 6.0.0.0

Чтобы более прямо ответить на ваши вопросы:

Как получить пространства имен сборки, а не ее зависимостей?

assembly.GetTypes().Select(t => t.Namespace)

Разве я не получил бы пространства имен зависимостей этой сборки?

номер

Как мне различить 2?

N / A * +1046 *

Для решения, нужно ли загружать сборку так, чтобы зависимости не загружались?

номер

Если да, как мне это сделать?

* +1057 * N / A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...