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


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

Обновлен: Ноябрь 2007

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

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

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

ms404275.alert_note(ru-ru,VS.90).gifПримечание.

В платформе .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

The #using Directive