神秘的引用
应用情境:
抽象描述:在项目的编译期,开发人员想介入实现自定义的功能。
n 案例1:希望将输出程序集拷贝到某个路径或者注册到GAC。
n 案例2:编译时连接到数据库,为指定的表生成强类型的Dataset,并引用它们。
n 案例3:当项目的版本升级时,自动为程序集生成出版商策略程序集(publisher policy)。
等等。现实中的应用往往比以上的案例要复杂的多,但总的出发点都是一致的:通过一定的方法和策略把一些任务封装起来,这些任务具有如下的特性:
n 有一定的规律,如每日构建;
n 重复执行,如log编译信息;
n 机械性比较高,如批处理文件,拷贝、删除、注册等等
n 复杂度比较高人工处理容易出错的任务,如根据xml schema生成CS类文件。
通过封装,到达的目的只有一个:提高工作效率,节约劳动成本。
伴随.NET2.0出现了MSBuilde组件,如果希望详细的了解它的特性,建议还是参考MSDN。
本例的通过如下的应用情境展示了MSBuild的一些特性:
编译时将本机上的一些xsd文件转化成一组cs文件,并为这些cs文件创建一个新的工程,编译
这个工程,并把该工程的输出程序集添加为源工程的引用。当然,解决这个问题的办法还可
以用VS IDE提供的Customtool机制,这种实现下次再写。
写到这里有点烦,罗里罗嗦的讲个不停,就是没提源代码在哪里下载,有源代码人家不
会自己看呀?就是就是,请各位下载源码看了再议吧。source and demo download .
勃主,题目不是神秘的引用吗?我怎么就没见哪里神秘呢?是吗?请你自己看看项目的引
用里面是否存在包含了Teacher或Student类的程序集?没有吧?看不见的引用却在起作用,
这还不够神秘呀?
别说我没告诉你,如果你把TestBuild.csproj用文本编辑器打开看看或者在解决方案浏
览器里把TestBuild项目卸载然后编辑,就可以发现其实一点都不神秘了。被我忽悠了吧?
生气吗?
其实,是工程文件中这句话起了隐藏引用的作用的,它从内存中添加了引用,所以从解
决方案浏览器中我们不能发现。