Поделиться через


Compilation.GetTypeByMetadataName(String) Метод

Определение

Возвращает тип в сборке компиляции и все сборки, на которые ссылается ссылка (кроме тех, на которые можно ссылаться только с помощью экстерн-псевдонима), используя каноническое имя метаданных CLR. Этот поиск соответствует следующему порядку:

  1. Если тип найден в сборке компиляции, возвращается этот тип.
  2. Затем выполняется поиск основной библиотеки (библиотека, которая определяет System.Object и не содержит ссылок на сборки). Если тип найден там, возвращается этот тип.
  3. Наконец, выполняется поиск всех оставшихся ссылок на неисключаемые сборки. Если найден один и только один тип, соответствующий указанному имени метаданных, возвращается один тип. Специальные возможности игнорируются для этой проверки.
public:
 Microsoft::CodeAnalysis::INamedTypeSymbol ^ GetTypeByMetadataName(System::String ^ fullyQualifiedMetadataName);
public Microsoft.CodeAnalysis.INamedTypeSymbol GetTypeByMetadataName (string fullyQualifiedMetadataName);
public Microsoft.CodeAnalysis.INamedTypeSymbol? GetTypeByMetadataName (string fullyQualifiedMetadataName);
member this.GetTypeByMetadataName : string -> Microsoft.CodeAnalysis.INamedTypeSymbol
Public Function GetTypeByMetadataName (fullyQualifiedMetadataName As String) As INamedTypeSymbol

Параметры

fullyQualifiedMetadataName
String

Возвращаемое значение

Null, если тип не найден или во время поиска возникла неоднозначность.

Комментарии

Так как VB не имеет концепции экстерн-псевдонимов, он учитывает все сборки, на которые ссылается ссылка.

Если основная библиотека ссылается на C#, она будет искаться в виде сборки extern. Все остальные сборки с псевдонимом extern не будут искать.

Так как доступность текущей сборки игнорируется при поиске типов, соответствующих указанному имени метаданных, если несколько ссылочных сборок определяют один и тот же символ типа (как часто происходит, когда пользователи копируют известные типы из списка BCL или других источников), этот API вернет значение NULL, даже если все, кроме одного из этих символов, в противном случае недоступны для пользовательского кода в текущей сборке. Для детального управления разрешением неоднозначности рекомендуется использовать GetTypesByMetadataName(String) вместо этого и фильтровать результаты для нужного символа.

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

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

Неоднозначность обнаруживается на каждом вложенном уровне. Например, если A+B запрашивается и имеется несколько Aфрагментов, но только один из них имеет вложенный B тип, поиск будет считаться неоднозначным и будет возвращен null.

Применяется к