Переадресация типов в общеязыковой среде CLRType Forwarding in the Common Language Runtime

Перенаправление типа позволяет переместить тип в другую сборку без повторной компиляции приложений, использующих исходную сборку.Type forwarding allows you to move a type to another assembly without having to recompile applications that use the original assembly.

Предположим, например, что приложение использует класс Example в сборке с именем Utility.dll.For example, suppose an application uses the Example class in an assembly named Utility.dll. Разработчики Utility.dll могут принять решение выполнить рефакторинг сборки и в ходе этого процесса могут переместить класс Example в другую сборку.The developers of Utility.dll might decide to refactor the assembly, and in the process they might move the Example class to another assembly. Если старую версию Utility.dll заменить новой версией Utility.dll и ее сопутствующей сборкой, приложение, использующее класс Example, завершится ошибкой, поскольку не сможет найти класс Example в новой версии Utility.dll.If the old version of Utility.dll is replaced by the new version of Utility.dll and its companion assembly, the application that uses the Example class fails because it cannot locate the Example class in the new version of Utility.dll.

Разработчики Utility.dll могут избежать этого, перенаправляя запросы к классу Example с помощью атрибута TypeForwardedToAttribute.The developers of Utility.dll can avoid this by forwarding requests for the Example class, using the TypeForwardedToAttribute attribute. Если атрибут применен к новой версии Utility.dll, запросы класса Example перенаправляются в сборку, которая теперь содержит этот класс.If the attribute has been applied to the new version of Utility.dll, requests for the Example class are forwarded to the assembly that now contains the class. Существующее приложение продолжает нормально функционировать без перекомпиляции.The existing application continues to function normally, without recompilation.

Примечание

В платформе .NET Framework версии 2.0 нельзя перенаправлять типы из сборок, написанных на Visual Basic.In the .NET Framework version 2.0, you cannot forward types from assemblies written in Visual Basic. Тем не менее приложения, написанные на Visual Basic, могут использовать перенаправленные типы.However, an application written in Visual Basic can consume forwarded types. То есть если приложение использует сборку, написанную на языке C# или C++, и тип из этой сборки перенаправляется в другую сборку, приложение Visual Basic можно использовать перенаправленный тип.That is, if the application uses an assembly coded in C# or C++, and a type from that assembly is forwarded to another assembly, the Visual Basic application can use the forwarded type.

Перенаправление типовForwarding Types

Для перенаправления типа следует выполнить следующую процедуру.There are four steps to forwarding a type:

  1. Переместите исходный код для типа из исходной сборки в целевую сборку.Move the source code for the type from the original assembly to the destination assembly.

  2. В сборке, где раньше находился тип, добавьте TypeForwardedToAttribute для типа, который был перемещен.In the assembly where the type used to be located, add a TypeForwardedToAttribute for the type that was moved. В следующем коде показан атрибут для типа с именем Example, который был перемещен.The following code shows the attribute for a type named Example that was moved.

    [assembly:TypeForwardedToAttribute(typeof(Example))]  
    
    [assembly:TypeForwardedToAttribute(Example::typeid)]  
    
  3. Скомпилируйте сборку, которая теперь содержит тип.Compile the assembly that now contains the type.

  4. Перекомпилируйте сборку, где раньше находился тип, со ссылкой на сборку, которая теперь содержит тип.Recompile the assembly where the type used to be located, with a reference to the assembly that now contains the type. Например, при компиляции файла C# из командной строки используйте параметр /reference (параметры компилятора C#), чтобы указать сборку, содержащую тип.For example, if you are compiling a C# file from the command line, use the /reference (C# Compiler Options) option to specify the assembly that contains the type. В C++ используйте директиву #using в исходном файле, чтобы указать сборку, содержащую тип.In C++, use the #using directive in the source file to specify the assembly that contains the type.

См. такжеSee also