Post by "rickey", 2007-03-22, 16:44
-----------------------------------------------------
在.Net Framework2.0中,增加了一个新的功能--Type Forwarding(不知道如何翻译)。
这项功能使得当你在重构代码时,将一个类型MyClass 从一个程序集A移动到程序集B后,无须重新编译引用了程序集A的应用程序MyApp成为可能.
假如, 原先的版本中,程序集A(A.DLL)包含有一个类型MyClass,其有一个方法MyMethod(),MyApp程序引用了程序集A中的MyClass。
要实现Type Forwarding的目的,需要完成以下几步工作:
- 将MyClass的代码从程序集A移动到程序集B;
- 编译程序集B,生成B.DLL;
- 在程序集A中添加对程序集B的引用;
- 在程序集A的AssemblyInfo.cs文件中,添加以下属性:[assembly:TypeForwardedToAttribute(typeof(MyClass))]
- 编译程序集A,生成A.DLL;
- 用新版本的程序集A(A.DLL)替换应用程序MyApp目录下的旧程序集A。
此时,你无须编译MyApp,运用MyApp程序,即能顺利运行;
如果没有第4步中,其它步骤相同的方式运行 MyApp程序,此程序将崩溃。
示例代码如附件:TypeForwardingTest.rar。
该文件共有三个文件夹:分别为TypeForwardingTest,TypeForwardingTest_V1和TypeForwardingTest_V2,其说明如下:
该文件夹中有应用程序MyApp和程序集A的源代码。
该文件夹中为:程序集A的AssemblyInfo.cs文件中,没有
[assembly:TypeForwardedToAttribute(typeof(MyClass))]语句。 该文件夹中为:程序集A的AssemblyInfo.cs文件中,有
[assembly:TypeForwardedToAttribute(typeof(MyClass))]语句。 验证步骤: - 打开 TypeForwardingTest文件夹下的TypeForwardingTest.sln文件,并编译整个Solution;
- 运行MyApp.exe文件,可输入如下信息:
The return value is:Hello, world.
Press Enter key to exit.
3. 打开TypeForwardingTest_V1文件夹下的TypeForwardingTest_V1文件,并编译整个Solution;
4, 将TypeForwardingTest_V1\A\bin\Debug目录下的A.dll和B.dll拷贝并覆盖TypeForwardingTest对应目录下的文件;
5,重复第2步操作,发现MyApp.exe崩溃了;
6, 打开TypeForwardingTest_V2文件夹下的TypeForwardingTest_V1文件,并编译整个Solution;
7, 将TypeForwardingTest_V2\A\bin\Debug目录下的A.dll和B.dll拷贝并覆盖TypeForwardingTest对应目录下的文件;
8, 重复第2步操作,发现MyApp.exe能够正常运转,并显示出2中的信息;
参考资料:http://msdn2.microsoft.com/en-us/library/ms404275.aspx |
|