Перенаправление типов (C++/CLI)

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

Все платформы

Эта функция не поддерживается во всех средах выполнения.

среда выполнения Windows

Данная функция не поддерживается в Среда выполнения Windows.

Требования

Параметр компилятора: /ZW

Среда CLR

В следующем примере кода показано использование переадресации типов.

Синтаксис

#using "new.dll"
[assembly:TypeForwardedTo(type::typeid)];

Параметры

  • new
    Сборка, в которую необходимо переместить определение типа.

  • type
    Тип, определение которого перемещается в другую сборку.

Примечания

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

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

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

  • Определение типа А.

  • Атрибут TypeForwardedTo для типа А и ссылку на сборку.

Примеры типов, которые могут быть переадресованы:

  • классы ссылки

  • классы значений

  • перечисления

  • интерфейсы;

Нельзя переадресовать следующие типы:

  • Универсальные типы

  • Собственные типы

  • Вложенные типы (если требуется переадресовать вложенный тип, следует переадресовать внешний тип)

Можно переадресовать тип сборке, написанной на любом языке среды CLR.

Таким образом, если файл исходного кода, который используется для построения сборки A.dll содержит определение типа (ref class MyClass), и требуется переместить это определение типа в сборку B.dll, необходимо:

  1. Переместите определение типа MyClass в файл исходного кода, используемого для создания B.dll.

  2. Выполните построение сборки B.dll

  3. Удалите определение типа MyClass из исходного кода, используемого для создания A.DLL, и замените его следующим кодом:

    #using "B.dll"
    [assembly:TypeForwardedTo(MyClass::typeid)];
    
  4. Выполните построение сборки A.dll.

  5. Используйте A.dll без повторной компиляции клиентских приложений.

Требования

Параметр компилятора: /clr