Visual Studio 在发布程序时找不到数据文件的一例解决方法[WPF中一定要将Build Action 设为Content]
这几天在读到《WCF3.5揭秘》这本书的第10章:高级安全。我被书中在叙述安全时的美国风情的描述深深吸引住了,在这儿他写到:
“从华盛顿的西雅图向南,驾车前往俄勒岗……你可以选择继续在州际5号公路上行驶,或者先向南转上美国101号高速公路……5号公路上开车你会很轻松,因为往波特兰的大部分路段都 是双向多车道的……相反101号则是双向单车道的……然而这条路的风景却让人情不自禁地赞叹,好些紧连着的弯道两旁,一边是茂密的森林,一边就是浩瀚的太平洋…..”极具雅致的描述让读者感到无比的轻松。
当然这儿并不是为了来写一篇读后感,我觉得在文章穿插一些这样的叙述让人感觉到很兴奋,选择是我们程序设计中经常遇到的问题,一个问题的解决方案也许有很多,都可以到达同一个目的地,不过用一个什么校报方案来达到目的地,则是每个人喜好相关。就像作者描述的那样,我们可以选择5号,那样可以很快速地到达;也可选择101,有好的景致欣赏,让人感觉豁然开朗。
昨天在帮老师写一个程序时,我用到两个独立的XML数据文件,编译时没有问题,不过在发布程序集时则遇了如下的问题:
提示找不到所在的数据文件,经过仔细的查找我发现了两个地方的设置会影响到这个问题:
1、 C:\User\[当前登陆用户]\AppData\Local\Apps\2.0\[程序目录散列名]\下没有所要求的数据文件
这种问题可以在项目设置的”Publish”下设置“应用程序文件组”将数据文件的“发布状态”从【数据文件】改为【包括】如图所示:
这样在发布安装文件才会将数据文件复制到所在数据目录中。
2、 编译时的文件路径和发布时用到的文件路径不一致
由于项目在编译时会把程序集放在\bin\Debug\目录下,而你所有的数据文件默认是放在项目的根目录下的,不会放到该目录下的。
发布的程序集则会将数据文件亦放在可执行的程序集同一个目录中。于是这两种方式下的文件目录会不一致。
解决方法:
这种情况的解决方式有多种,不过我在这儿使用了一种比较易用的方式,那就是使用编译的条件指令#if… #else… #endif来实现两个目的:编译运行和发布运行。
由于你的项目在发布时会使用当前的设置方式工作,即如果是Debug[Visual Studio 默认是打开的,你可以在项目属性看到]方式,则发布的是这个方式下的程序集;如果是Release方式,则发布亦是这种方式下的程序集。所以我们要达到上面所说的两个目的就可以使用这两种方式的设置。
对于Debug方式我们使用DOS的目录操作方式,添加“..\”来达到上一级目录,由于编译的可执行文件放的目录与项目文件的相差两个目录级,所以我们使用“..\..\”来达到要求。具体方式我们可以看图所示:
这样我们就可以在Visual Studio 中设置Debug下编译调试程序集,而在Release下发布程序集了。即在工具栏上选择成“Release”来发布程序集,如图所示:
当然这也不是唯一的方法,这是我认为比较具有实战意义的方案了。就像前面所说的那样,这也算是观赏风景的一种方式吧。