Переадресация типов в общеязыковой среде CLR

Переадресация типа позволяет переместить тип в другую сборку без перекомпиляции приложений, использующих исходную сборку.

Предположим, например, что приложение использует класс Example в сборке с именем Utility.dll. Разработчики Utility.dll могут решить провести оптимизацию сборки, и в этом процессе они могут переместить класс Example в другую сборку. Если старая версия Utility.dll заменяется новой версией Utility.dll и ее сопутствующей сборкой, то приложение, использующее класс Example получает отказ, поскольку оно не может найти класс Example в новой версии Utility.dll.

Разработчики Utility.dll могут избежать этого с помощью пересылки запросов для класса Example, используя атрибут TypeForwardedToAttribute. Если атрибут применяется к новой версии Utility.dll, то запросы к классу Example направляются на сборку, которая теперь содержит этот класс. Существующее приложение продолжает функционировать нормально без перекомпиляции.

ПримечаниеПримечание

В платформе .NET Framework версии 2.0 типы из сборок, написанных на Visual Basic, не могут быть перенаправлены.Однако приложение, написанное на Visual Basic, может использовать перенаправленные типы.А именно, если приложение использует сборку, написанную на C# или C++, и тип из этой сборки перенаправляется в другую сборку, то Visual Basic приложение может использовать этот перенаправленный тип.

Пересылка типов

Для пересылки типа нужно выполнить четыре шага:

  1. Переместите исходный код для типа из исходной сборки в целевую сборку.

  2. В сборке, в которой раньше находился тип, добавьте TypeForwardedToAttribute для типа, который был перемещен. В следующем коде показан атрибут для типа с именем Example, который был перемещен.

    [assembly:TypeForwardedToAttribute(typeof(Example))]
    
    [assembly:TypeForwardedToAttribute(Example::typeid)]
    
  3. Скомпилируйте сборку, которая сейчас содержит тип.

  4. Перекомпилируйте сборку, в которой раньше находился тип, со ссылкой на сборку, содержащую тип сейчас. Например, при компиляции файла C# из командной строки, используйте параметр /reference (параметры компилятора C#), чтобы указать сборку, содержащую тип. В C++, используйте директиву #using в исходном файле, чтобы указать сборку, содержащую тип.

См. также

Ссылки

TypeForwardedToAttribute

Type Forwarding

#using Directive (C/C++)