摘要:
今天在做一个VSTO (Visual Studio Tools for Office)的示例时遇到了点儿麻烦,一开始百思不得其解,后来找到问题的根源之后发现蛮有意思的,写出来和大家分享一下。
?
问题是这样的,我想在Word文档中通过Linked Assembly使用System.Xml命名空间中的功能,最简单的就是用XmlDocument载入整篇XML文档,然后再通过XPath查询取得所需的数据。这个在.NET开发时也经常遇到(是不是太小儿科了?),所以我就随手写了份XML文档作读取的测试,这份文档的内容如下:
?
?????
?????
?
XML文档的正确性先不说,我接着又在VSTO项目中增加一个辅助类用来读取这份xml文档并取出其中所有book的信息,然后在code behind文件里 (ThisDocument.cs)调用这个辅助类及相应方法来获取这些信息,然后在指定位置创建表格进行显示。OK,一切好像都进行得很顺利,可当Word文档运行时就是无法读出XML信息,也没有任何错误提示。这是怎么回事?
?
为了找到错误,我打开VS.NET的调试器,根据应用程序的运行,发现每当运行到下面这行代码之后,代码执行马上结束:
?
doc.LoadXml(this._fileFullPath);
?
怎么,无法正确读入XML文档?难道XML语法有误?这么一想,我再回过头仔细检查一下上面那份XML文档的代码,果然发现了问题——属性值应该包含在括号里,id=1应该写成id=”
1”!
?
看来错误应该找到了(而且是个低级错误),可是为什么Word在运行的时候一点儿错误的提示都没有呢?带着这问题又查了查帮助文档,果然有解答:
?
When you are developing Visual Studio Tools for Office projects you will find that if an exception occurs, it will not be shown in the Office application and execution of your code will simply end at that point. This can make it difficult to find and resolve bugs.
?
原来Word(以及Excel)在运行与之关联的.NET assembly时,一旦运行出错不会给出任何提示,从而也就出现了我上文中所提到的那种情况——应用程序运行非常“顺利”,但指定功能却无影无踪了。
?
文中还给出了两种解决办法:
?
You should include exception handling code in your projects to notify users of any issues. However, when debugging you can set......[
阅读全文]