Переадресация типов в общеязыковой среде CLR
Обновлен: Ноябрь 2007
Переадресация типа позволяет переместить тип в другую сборку без перекомпиляции приложений, использующих исходную сборку.
Предположим, например, что приложение использует класс 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 приложение может использовать этот перенаправленный тип. |
Пересылка типов
Для пересылки типа нужно выполнить четыре шага:
Переместите исходный код для типа из исходной сборки в целевую сборку.
В сборке, в которой раньше находился тип, добавьте TypeForwardedToAttribute для типа, который был перемещен. В следующем коде показан атрибут для типа с именем Example, который был перемещен.
[assembly:TypeForwardedToAttribute(typeof(Example))]
[assembly:TypeForwardedToAttribute(Example::typeid)]
Скомпилируйте сборку, которая сейчас содержит тип.
Перекомпилируйте сборку, в которой раньше находился тип, со ссылкой на сборку, содержащую тип сейчас. Например, при компиляции файла C# из командной строки, используйте параметр /reference (импорт метаданных) (параметры компилятора C#), чтобы указать сборку, содержащую тип. В C++, используйте директиву #using в исходном файле, чтобы указать сборку, содержащую тип.