解决Windows Phone平台上不能枚举工程自带资源的问题

Windows Phone开发中内置(built-in)资源文件的编译方式(build action)主要有Content和Resource两种,想必具体的区别做过相关开发的同学都了解(不了解的看WP7 working with Images: Content vs Resource build action)。但不管是放在XAP内引用还是dll内引用,都无法进行枚举,这就带来了很大的不方便:预置的资源都必须硬编码在代码内才能引用或者转移到Isolated Storage中。

今天在参考PhoneGap开发框架时偶然发现了一个很妙的方法,一劳永逸解决问题。

它的思路是执行预编译命令,利用一个JScript脚本遍历工程下某文件夹所有文件,生成为XML文件。程序中则读取这个文件一一将资源读入。具体步骤:
1. 到PhoneGap的Github页面上下载BuildManifestProcessor.js
2. 根据需要修改生成的xml文件名和节点名。
3. 右键选择项目属性-Build Events,在Pre-build event command line里面加上

CScript "$(ProjectDir)/BuildManifestProcessor.js" "$(ProjectPath)"

4. 在程序中读入生成的xml,代码可以参考CordovaView.xaml.cs的GapBrowser_Loaded()方法。

另外需要注意的是,确保cscript.exe可以执行。有的机器上可能为了安全禁止直接执行JScript代码。