.Net的EXE文件可以直接当DLL文件引用
今天发现一个有意思的事情,同事问我,一个EXE文件里面的一些数据可否直接用引用来加载使用。我想想了,用反射应该可以。但我知道,.Net的程序集有多种载体形式,其中EXE就是一种,也就是说,EXE其实就是一个程序集,只不过带了一个启动模块(一个传统的PE文件模块,用于启动.Net CRL,然后回到应用程序入口执行程序)。
如果跳过这个启动模块,不难想到,这个EXE文件就和一个DLL文件没什么两样了。其实我们可以不修改任何代码的情况下,直接把一个EXE项目编译成DLL文件。
我们大胆的做了一个测试,直接把EXE文件的扩展名改为DLL然后让VS来直接引用,没想到就直接成功了。后来比较一下用IDE输出不同的EXE文件和DLL文件,发现两个也是一模一样的,也就是说,IDE的输出也只是修改了一个扩展名。搞笑,不过,这也算是件好事。