Introduction
Type forwarding is a CLR feature that allows us to move a type from its original assembly to another assembly in such a way that there is no need to recompile the applications referring to the original assembly.
The Requirement
Suppose you have created an assembly named MyLibrary
which contains a class named MyClass
. Let's say, some of your applications refer to the MyLibrary
assembly and utilizes MyClass
. In a later phase, you decide to move MyClass
from MyLibrary
to a newly created assembly called MyAdvancedLibrary
. If you ship a new version of MyLibrary
(which now doesn't have MyClass
), along with MyAdvancedLibrary
, then your existing applications looking for MyClass
in MyLibrary
will not find the MyClass
and end up with errors.
The Solution
Now, in order to run your applications without recompiling them, you can use the Type Forwarding feature of the Common Language Runtime.
In the above scenario, you need to apply TypeForwardedToAttribute
to the new version of your MyLibrary
, so that requests for MyClass
are now forwarded to the newly created library MyAdvancedLibrary
that now contains MyClass
.
Steps
- Move the
MyClass
code from MyLibrary
to MyAdvancedLibrary
. - Put
TypeForwardedToAtrribute
in MyLibrary
for the MyClass
type.
[assembly:TypeForwardedToAttribute(typeof(MyClass))]
- Compile the newly created
MyAdvancedLibrary
. - Add a reference of
MyAdvancedLibrary
into MyLibrary
. - Recompile
MyLibrary
(because MyClass
used to be located in that).
Now, you can ship the new version of MyLibrary
along with MyAdvancedLibrary
and run your applications without a recompile!
The Limitation
The .NET Framework version 2.0 does not allow type forwarding from assemblies written in Visual Basic. However, a Visual Basic application can consume forwarded types if it uses the assemblies coded in C# or C++.