﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-若我为上帝,谁为众生</title><link>http://www.cnblogs.com/telephoner/</link><description>.net技术及哲学思考</description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 15:14:39 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 15:14:39 GMT</pubDate><ttl>60</ttl><item><title>谭望嵩和郑智</title><link>http://www.cnblogs.com/telephoner/archive/2008/08/17/1269630.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Sun, 17 Aug 2008 01:23:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2008/08/17/1269630.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/1269630.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2008/08/17/1269630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/1269630.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/1269630.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.cnblogs.com/telephoner/archive/2008/08/17/1269630.html'>阅读全文</a><img src ="http://www.cnblogs.com/telephoner/aggbug/1269630.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41940/" target="_blank">[新闻]惠普139亿美元完成对EDS的收购</a>]]></description></item><item><title>菲尔普斯是韩国人</title><link>http://www.cnblogs.com/telephoner/archive/2008/08/17/1269625.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Sun, 17 Aug 2008 01:14:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2008/08/17/1269625.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/1269625.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2008/08/17/1269625.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/1269625.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/1269625.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.cnblogs.com/telephoner/archive/2008/08/17/1269625.html'>阅读全文</a><img src ="http://www.cnblogs.com/telephoner/aggbug/1269625.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41940/" target="_blank">[新闻]惠普139亿美元完成对EDS的收购</a>]]></description></item><item><title>与大家再讨论ConfigurationManager.OpenExeConfiguration(exePath)的问题</title><link>http://www.cnblogs.com/telephoner/archive/2008/07/17/1245437.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Thu, 17 Jul 2008 12:06:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2008/07/17/1245437.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/1245437.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2008/07/17/1245437.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/1245437.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/1245437.html</trackback:ping><description><![CDATA[<p><font face="Verdana">我的&lt;<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/telephoner/archive/2008/07/15/1243260.html">再谈额外的配置文件读取和ConfigrationManager.OpenExeConfiguration(exePath)的误导性错误</a>&gt;的blog贴出来后,有的朋友提出了不同的意见,认为这不是一个bug,而是关于exePath的这个参数的不同理解,那么我再谈谈我的看法.(我仍坚持我的看法,这应该是个bug)<br />
<br />
个人觉得:如果exepath是exe文件的路径的话,那首先是会产生另外一个bug,就是翻译错误,在msdn上明确的指出这是exe的配置文件的路径,如果是exe的路径,那么翻译就错了.</font></p>
<p><font face="Verdana">第二,会是exe的path么?个人觉得不应该是exe的path.<span style="color: red">因为ConfigurationManager.OpenExeConfiguration 方法最大意义就是打开自定义的额外的配置文件</span>.那么,xxx.exe.config是官方的默认的配置文件的文件名,那还算甚么额外的配置文件,如果我自定义配置文件的话,首先会起个不同于xxx.exe.config的名字.反过来说,要是使用了xxx.exe.config文件,那就不叫额外的配置文件了.</font></p>
<p><font face="Verdana">如果有哪位帅哥有其他的读取操作额外配置文件的方法,敬请赐教,相信大家也会很需要这样的实用的东西.<br />
<br />
另:如果那位帅哥有了对这个方法更权威的解释和操作说明,或是详细的此方法的其他使用的例子,也希望能贴出来大家一起讨论,个人觉得dotnet framework的版本升级过程中,关于配置文件的部分更改的挺乱的,现在很多新手也都不知道该如何使用了.希望大家能多多讨论,把自己的经验都拿出来分享,毕竟配置文件的使用是各个项目都用的到的,我罗唆了,大家见谅.</font></p>
<img src ="http://www.cnblogs.com/telephoner/aggbug/1245437.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41939/" target="_blank">[新闻]搜狗五笔输入法发布</a>]]></description></item><item><title>再谈额外的配置文件读取和ConfigrationManager.OpenExeConfiguration(exePath)的误导性错误</title><link>http://www.cnblogs.com/telephoner/archive/2008/07/15/1243260.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Tue, 15 Jul 2008 04:18:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2008/07/15/1243260.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/1243260.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2008/07/15/1243260.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/1243260.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/1243260.html</trackback:ping><description><![CDATA[前两天有人在我的blog上问关于额外的配置文件的读取的问题,可惜的是我的这篇blog已经是1年前写的了,而且我也1年没有再摸编程了,先在断网的情况下在msdn本地库里试了一晚上,没有结果,今天早上在网上搜了搜,发现也有人遇到这样的问题,最终我发现了msdn的对此问题的误导性错误,与大家分享一下.<br />
----------------------------------------------------------------------------------------------<br />
首先说<font face="Verdana">ConfigrationManager.OpenExeConfiguration(exePath)的问题:<br />
1.此处是一个bug,exePath在msdn的说明中是要读取的配置文件的路径,而在生成<font face="Verdana">System.Configuration.Configuration a = System.Configuration.ConfigurationManager.OpenExeConfiguration(exepath)的时候,实际在生成的a对象中,可以看到它的FilePath属性,让人大吃一惊,它显示的路径是原exePath路径+.config.<br />
所以a对象中永远为空,因为你的X.config是存在的,但它读取的却是X.config.config.<br />
<br />
这是否是我们的理解有误而非Bug呢?<br />
不,在试验在exePath中填写.config前面的部分后,提示错误,无法读取该配置文件,即它的ConfigurationManager.OpenExeConfiguration()方法要求exepath必须是一个.config文件!!!<br />
<br />
2.这个Bug可能的原因<br />
我猜想,它原来的读取的方法和类都是针对的配置文件的形式为:可执行文件文件名+.exe+.config的形式,或者是Machine.config.而这时不需要识别.config的,而当在.net 2.0里面时候,添加的这个读取额外配置文件的方法,由于一些失误,仍然是匹配的原来的老方法,导致它在读取是自动加上了.config.<br />
---------------------------------------------------------------------------------------------<br />
解决方法<br />
我参考了&lt;Configuration类在网页实现对web.config的修改&gt;(<font face="Verdana"><a href="http://tech.sina.com.cn/s/2008-06-30/1013712947.shtml">http://tech.sina.com.cn/s/2008-06-30/1013712947.shtml</a></font>)的方法<br />
即真假config文件的方法:<br />
1.先在项目的bin/debug目录下建立一个额外的config文件,即X.config;<br />
2.在同目录下建立一个X.config.config文件;<br />
3.所有信息都在X.config.config内,即appSettings节点等;<br />
4.然后读写都可以了.<br />
-----------------------------------------------------------------------------------------------<br />
我写的一个小例子: <br />
1.读取配置文件信息的代码<br />
<div class="cnblogs_code"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">配置文件的路径,此处为配置文件(假)的路径</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;path</span><span style="color: #000000">=</span><span style="color: #000000">Application.StartupPath</span><span style="color: #000000">+</span><span style="color: #800000">"</span><span style="color: #800000">\\App2.1.config</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示结果，即配置文件的MachineID字段的值</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;showContent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">a对象从额外的配置文件(真)生产,而exepath,即path填写的是配置文件(假)的路径,而配置文件(真)的路径=配置文件(假)的路径+.config;而配置文件(假)的文件名中,最后也应是.config结尾.</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Configuration.Configuration&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.Configuration.ConfigurationManager.OpenExeConfiguration(path);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如果配置文件中不包括appSettings节,则抛出异常.</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(a.Sections[</span><span style="color: #800000">"</span><span style="color: #800000">appSettings</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_521_599_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_521_599_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_521_599_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_521_599_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_521_599_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_521_599_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_521_599_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_521_599_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_521_599_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_521_599_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Exception(</span><span style="color: #800000">"</span><span style="color: #800000">该配置文件中不存在appSettings节点</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img id="Codehighlighter1_629_745_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_629_745_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_629_745_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_629_745_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_629_745_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_629_745_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_629_745_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_629_745_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_629_745_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_629_745_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showContent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a.AppSettings.Settings[</span><span style="color: #800000">"</span><span style="color: #800000">MachineID</span><span style="color: #800000">"</span><span style="color: #000000">].Value.ToString();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Label显示配置文件中的MachineID的值</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label1.Text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;showContent;</span></div>
</font></font><br />
2.配置文件名称:<font face="Verdana">App2.1.config</font>.config<br />
内容如下:<br />
<div class="cnblogs_code"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">1.0</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">utf-8</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">configuration</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">appSettings</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">add&nbsp;key</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">MachineID</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">App2.1&nbsp;Long</span><span style="color: #800000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">appSettings</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">configuration</span><span style="color: #000000">&gt;</span></div>
<br />
<br />
3.最后读取出的结果显示在label中,为:<font face="Verdana">App2.1 Long<br />
<span style="color: #ff0000"><br />
其实这是很无奈的方法.</span><br />
<br />
--------------------------------------------------------------------<br />
参考: 1.&lt;Configuration类在网页实现对web.config的修改&gt;&nbsp; <font face="Verdana">http://tech.sina.com.cn/s/2008-06-30/1013712947.shtml</font>;<br />
2.&lt;<a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/drizzlecrj/archive/2007/04/02/697146.html">郁闷的 ConfigurationManager</a>&gt;&nbsp; <font face="Verdana">http://www.cnblogs.com/drizzlecrj/archive/2007/04/04/697146.html</font>;<br />
3.<font face="Verdana">http://msdn.microsoft.com/zh-cn/ms224437(VS.80).aspx</font>;</font>
<img src ="http://www.cnblogs.com/telephoner/aggbug/1243260.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41938/" target="_blank">[新闻]新学年开始 大学生适用的十大互联网应用</a>]]></description></item><item><title>看《时光之心》的感受</title><link>http://www.cnblogs.com/telephoner/archive/2008/04/20/1161808.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Sat, 19 Apr 2008 17:05:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2008/04/20/1161808.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/1161808.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2008/04/20/1161808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/1161808.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/1161808.html</trackback:ping><description><![CDATA[最近半月都没看小说，再看《时光之心》，一边看着书，一边看着作者对于票和大家关注度低的抱怨，说起来作者的文笔很不错的，小说写的也是行云流水，可是怎么大家关注越来越少呢？<br />
<br />
我总结了下，两个问题： <br />
1。行文散漫，中心主题或是目标不明显。作者一直是站在世外的角度去写故事，主角的带入度低，这是第二个问题了，下面再谈，每个小说，都要有个中心的主题，才能凝聚力量，有的放矢。《魔戒》的主题就是&#8220;毁灭魔戒&#8221;，《无限恐怖》的主题就是&#8220;活下去&#8221;，《明》的主题就是&#8220;平等&#8221;，例子很多，我就不多举了。主题可大可小，可复杂可简单，但不能没有。<br />
如果没有，小说就缺乏了向心力，成了游记，而AB的书一直有这种问题，从《数字生命》到《野性之心》，再到《时光之心》，原因何在？因为AB的书是属于那种从一个被改变的假设向外延推论的类型，就好比现在很火的都市异能类型，都是从一个不合逻辑的能力或物品开始推论，到底这种非现实的东西能改变什么，改变从自身开始，向外延伸，改变自己的生活，改变亲戚朋友同学老师的生活，改变一省，改变一国再到整个世界。<br />
这种方式不是不好，而且其优点很多，比如，思维的连贯性，和易写易用什么的。但其缺点也是明显的，就是缺少内容主线的推动力和目标，很多都市异能的书都是失败在了这点上，用异能强壮了自己，也挣了钱了，地位也有了，吃喝不愁了，小弟无数，美女万千，然后呢？就没有目标了，就让人厌烦了。<br />
而这种缺点怎么解决呢？其实很简单——build一个强大的，邪恶（是否邪恶，看作者功力而定，功力足够高强的，可以写不邪恶的，功力不够，那就老老实实的写邪恶的吧，当然，功力最高深的是写出来让你搞不清楚他是否邪恶)的反面BOSS。boss这个东西在小说，游戏，电影，电视剧等多种领域都是不可或缺的，但凡是好的作品，里面都有1到若干个boss，供主角去艰难克服。而刻画好一个主角，只是成功了一半，而刻画好了一个boss，就成功了两倍。<br />
<br />
2。人物缺乏带入感，作者总是站在一个现代的视角去控制主角，连带造成了主角也是一种若即若离的态度，对作品中的世界很没有投入的感觉，当然，ab对这个世界的构建也有很大缺陷，很多细节和框架都没有搭建全。以致于写到哪里就描述两句，写不到那里就当看不见。而一个真实完整的世界和其设定，是保证读者能够全身心的投入其中，甚至忘记现实的第一保障。其实想来，时光之心的世界跟随波逐流一代军师的世界架构基本类似，但细节方面的粗糙，造成了整个世界给人的感觉都是模模糊糊的，而主角呢？更是模糊，用一个词来形容——虚无化。主角一直是在一种出世的态度对待这个世界，从未真正的投入进去，是适应这个世界，而是在不顾一切的去改造这个世界，使其接近原来的现实世界。给读者带来了两个麻烦：a。读者无法形成人物的带入感，无法以己身去替换叶韬。b。无法形成对世界的带入感，几乎不能去体验那个世界的历史军事文化民风，甚至是一草一木。<br />
<br />
所以说，革命尚未成功，同志仍需努力。
<img src ="http://www.cnblogs.com/telephoner/aggbug/1161808.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41937/" target="_blank">[新闻]Google拟在9月发布自有浏览器 或采用火狐内核</a>]]></description></item><item><title>zt《异域镇魂曲》简介(看了让人思索良久)</title><link>http://www.cnblogs.com/telephoner/archive/2007/07/15/818676.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Sun, 15 Jul 2007 05:30:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2007/07/15/818676.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/818676.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2007/07/15/818676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/818676.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/818676.html</trackback:ping><description><![CDATA[<p align=left>英文名：Planescape: Torment<br>中文名：异域镇魂曲<br>开发制作：Interplay/Black Isle<br>代理发行：台湾英特卫国际有限公司<br>上市时间：1999年<br>游戏类型：RPG（角色扮演）<br>配置要求：<br>基本配置：<br>　　奔腾 200MMX（或兼容CPU） <br>　　32 MB 内存 <br>　　Windows 95，DirectX 5.0以上 <br>　　650 MB硬盘空间 <br>　　8X CD-ROM <br>　　4 MB显卡 <br>　　SB兼容声卡 <br>　　鼠标、键盘 <br><br>　　推荐配置：<br>　　奔腾 II 266 MHz(或兼容CPU) <br>　　4 MB内存 <br>　　800 MB硬盘空间 <br>　　8X CD-ROM <br>　　8 MB显卡</p>
<p align=left><br><span style="FONT-SIZE: 14pt; LINE-HEIGHT: 100%">简介:<br><br>《异域镇魂曲》作为Gamespot和Computer Gaming World联合评选出的，1999年最佳游戏编剧和年度角色扮演游戏，是续&#8220;博德之门&#8221;后由Interplay出品的第二款标准的基于TSR的《龙与地下城》系列的角色扮演游戏，这款1999年最佳RPG由着名的Black Isle小组操刀制作，该小组同时也是1997年最佳RPG游戏&#8220;辐射&#8221;和1998年最佳RPG游戏&#8220;博德之门&#8221;的制作者。<br><br><br><br>《异域镇魂曲》是一个神秘而耐人寻味的有着哲学命题和壮丽宏大史诗般的剧情的一个游戏，是一个不用担心死亡而去寻求真正死亡的游戏。，你将在那里遇到难以想象的生物和出人意料的事件，整个故事情节将如同一本精彩绝伦的小说一般展现在你的面前它那神秘的世界，宏伟的场景，华丽的效果画面，变幻莫测的游戏主线，引人入胜的故事情节，创意非凡的物品和NPC设定，冷峻的科幻色彩，诡异的情节，庞大的世界观、AD&amp;D规则和复杂海量140万字的精彩的对话使它盘踞世界游戏排行榜榜首长达半年之久.<br><br><br>这到底是什么样的一个游戏呢？<br><br>与东方人的偏好不同，西方人更喜欢在生与死上动心思，在《异域惊魂曲》中，玩家所扮演的不象其它RPG那样，要么是一个英俊小生，要么是千娇靓女，在这里你将作为一个遍体鳞伤的,在千百世中不断轮回，丑陋的无名氏而存在。在经历了无数次的死而复生后无名氏失去了大部分记忆，游戏开始时你又一次复活,独自一人从l停尸间冰冷的停尸台上醒来，为子找回自己失落的记忆，寻觅自己死而不朽的原因，无名氏开始了探索自我生命之旅。不朽,从另一个角度上意味着无名氏与同伴的不同之处是:不会真的死亡,不必死后就必须重新载入进度,当你的生命降为0以后,会马上从某个特定的地方复活,对无名氏来说,死亡只是一个简单的仪式,有时它甚至可以帮你完成一些看起来不可能的任务. 这个游戏剧情特色还有就是游戏中并没有拯救世界或者与邪恶作战等&#8220;宏大&#8221;的情节，有的是个人内心的挣扎，冲突，包括主角与各个伙伴对自己&#8220;本性&#8221;所作的斗争。而这种剧情不仅在游戏中可算是绝无仅有，更是比一般的拯救世界的剧情更加感人，更能震撼人心。 相信，当你进入到这个游戏中时，当你为解开游戏主角的不死之谜而前进时，你会情不自禁的将自己融入到这个魔幻的世界中去,投入到这个貌似丑陋的角色当中去.<br><br><br><br>经验的取得,通常是与敌人战斗并获胜,虽然《异域镇魂曲》同样有许多的战斗场面与人物培养细节，但它的内容其实更像是个冒险游戏。在游戏中解谜与对话的重要性远超过杀杀砍砍的战斗，而且最大的经验值来源往往是透过适当的对话取得，而非卤莽地将对手杀死.如果某个任务可以用武力和智力,你会发现,用智取胜的好处会大于用武力来解决,包括最终的BOSS也能用智力,也能靠对话来解决.<br><br><br>这个游戏因为它的思想深度而得到了玩过它的人的一致赞扬，被誉为游戏艺术化的真正代表，于灵魂，永生，死亡的探索是深刻而独特的；但是那压抑阴暗的气氛与色调对于那些游戏日式游戏的爱好者来说，它颓废阴暗的美工简直就是美式游戏邋遢肮脏画面的典型,(游戏画面下面有截图)但这正是这个游戏的特色之一,与游戏的内容紧密相合,完全符合环境气氛.游戏刻画了栩栩如生的场景图像，荒凉压抑的外星荒漠，热闹喧哗的繁华都市，阴深幽暗的地下墓穴，庞大庄严的古代要塞，这些堪称精品的场景都是手工精心绘制而成。制作者也修改了魔法的施放画面，场面比起以前的龙与地下城类游戏都要显得宏大，再加上出色的背景音乐制作，&#8220;异域惊魂曲&#8221;不仅拥有精彩的剧情设置，在视觉和听觉方面也有不俗的表现。 <br><br><br>游戏中你会拥有各种奇妙的道具。一个主角的眼珠子也作为装备出现的游戏中(下面有截图)在下怀疑是否还会有人担心游戏的物品不够丰富。没有什么比更换牙齿、挖掉眼珠换钱更酷的了。所以，在这里&#8220;武装到牙齿&#8221;并不是一句空话。除了必不可少的武器、盾牌、盔甲、皮靴、戒指、耳环、腰带和头盔以外，这里还有一只能让主角的防御上升一个等级的玻璃眼球，附加中毒效果、攻击为4-13的牙齿，每高念一遍咒语就能得到33块钱的耳环，防御等级加一、附加50%防火效果的耗子尾巴，提高敏捷度25%的死人手指骨（这些都是什么玩意！？）；除此之外，还有乾枯的骷髅头、自己的内脏、死耗子、缝合伤口而导致3点HP回复的针线&#8230;&#8230;看到这些希奇古怪的东东，在下是不是不用再大费口舌赘述物品的种类繁多了？ <br><br><br>游戏中共有4种职业:战士,法师,盗贼和牧师,你可通过特定的人物交谈而转换职业,每次只能拥有一个职业,,也只能合用当前职业的技能,主角一开始从停尸间醒来时是一个3级的战士,其它职业都是一级,一般来说职业选择应以战士为主,法师为辅.<br><br><br>老实说，这不是一款爱情游戏，爱情和它简直不沾边，至多只是绵羊身上的一撮毛，通长意义的恋爱游戏FANS简直一辈子不会去碰它，但是就是那么一点爱情，足可以叫其他游戏黯淡失色。它那超越生死的爱不是其它游戏那些看似幼稚的爱情能比的,这点只有在游戏中慢慢的才能体会.<br>主角在游戏中有两位女同伴，吸精夜魔失宠和人与恶魔的混血儿阿娜，她们自愿跟着主角冒险，为他吃了不少苦。但是今天我不说她们的故事，我更想提提主角的两个前世情人，为爱情受伤的灵魂戴娜拉和将你变成不死身的夜巫——不死者。戴娜拉拥有透视未来的能力，主角的一个为了利用她的能力而博取了她的爱情，那个前身也成功地进入了悔恨要塞。在要塞前，他唆使戴娜拉自杀，让戴娜拉的灵魂指引他来看穿整个要塞的迷宫。至于戴娜拉有没有看穿前身的用意，游戏里没有说——因为游戏是站在无名氏的角度回忆的，但是从游戏的叙述看无论如何戴娜拉都愿意为爱人牺牲生命。在她死后，戴娜拉的灵魂仍然挂念着主角，主角在一开始的停尸房就可以遇见她。戴娜拉的声音交织着深深的怨恨和同样强烈的爱意，但是如果主角好言以待，她仍然愿意帮助主角，向他透露了一些身世，最后主角进入悔恨要塞时前来警告的也是她，如果游戏失败——这个游戏的失败不是主角的死亡，而是关键线索的丢失——戴娜拉德的灵魂还是默默站在主角的后面，哪怕此时主角已经将她忘得一乾二净。与愿意为了爱情粉身碎骨的戴娜拉不同，夜巫是一个十恶不赦的人，对于前往求助的人，她都会问：&#8220;什么才能改变一个人的本质？&#8221;没有一个人符合她的心意，于是所有人都被杀了，但是当主角求助的时候，任何答案都不重要，她将无条件的为主角服务——因为她爱上了主角。或许爱情不是真正的解答，真正的谜底在于她已经找到了属于她自己的答案。至少爱情改变了她的一部分本质，在她那丑恶扭曲的心灵宛如沙漠的心灵上开出一朵原属于温室的鲜花。此后夜巫向法印城的统治者——痛苦女士——挑战失败，被拘禁于一个小小的位面中。但是她在法印城的分身依然竭尽所能帮助主角，在最后，他们又重逢了，这个丑陋的老太婆仿佛又变成当日的美丽女子，甚至与失宠和阿娜争风吃醋。在向主角透露了他们的故事后，她心愿已了，在向主角点明去路后借无名氏之手杀死了自己。异域是一个探求信仰的游戏，爱情也是信仰的一个重要部分，它能改变人也能毁掉人，就像无名氏最后与超凡者的对话：是吗？我见过信仰移动城市，使一个人脱离死亡，将邪恶女巫的心转变为仁慈。这整个要塞都是有信仰构筑的。信仰诅咒了一个女人，她的心紧系于希望，希望一个不爱她的人爱她。信仰让一个人追寻不朽，他成功了。而且它让一个鬼魂以为自己不只是我的一部分<br><br><br>对很多玩家来说,长篇的对话是他们不原深入探索游戏的原因,觉得那些对话冗长累牍的,让人受不了,但这恰巧是极为重要的一个内容,也是游戏的精华所在,有些对话可一带而过,但有些对话还是要仔细看清,看明,因为,这就是这个游戏的本质所在.<br><br><br><br><br>　　异域镇魂曲是一个庞大的游戏，而且允许有很多种不同的玩法。创建一个角色对游戏的进程是否顺利和最终的结局是否美满有很大的关系。建立一个强大角色的关键在于理解各种属性和恰当的分配组合。尽管每个属性的基本含义都很明显，但很多重要的数据是无法仅仅从字面就能读出来的。<br>下面我将为大家一一分析： <br><br><br>　力量(str)：力量除了影响击中和途害目标外，还能够用力量砸开游戏中85%的锁。<br>在对话选项中，力量值还会 影响你威胁NPC的成功率。任何意图具有高战斗力的玩家都应该在一开始将力量升到18，然后买一 个力量刺身(+1str)达到19str(18str=+1/+3 hit/dam，19str=+3/+7 hit/dam)。<br><br>　灵敏(dex)：没有必要把灵敏度加到最高，到18就差不多了。<br><br>　体质(con)：体质在游戏的一开始并不怎么重要，但在后期就慢慢显现出它的威力。<br>体质影响你体力恢复的速度 ，也决定你的体务值。体质拥有最高值25点的话，你可以在一分钟里恢复100点体力！另外，由于 从第10级开始，每升一级体力值只会增加1-3点而不是之前的1-10点，高体质带来的好处就非同小 可(24点的体质可以使每升一级多加7点的体力)，大大加强了你搞打击和战斗的能力。当你的级别步入十级以上以后，每一点体质的改进都会使战斗轻松很多。<br><br>　智力(int)：除了影响你的魔法咒语数量以外，更高的智力还使角色在与NPC交谈时拥有更多的选项。<br>一些任务 不仅能提供经验值，如果你的智力足够高的话，还能让你得到永久的属性提高。智力还奖励你的 lore技巧(鉴别物品)。任何魔法师角色都需要较高的智力。<br><br>　智慧(wis)：不管你在游戏中选择了怎样的职业，智慧都是最重要的属性。<br>智慧超过20以后，人所能得到的经验值比一般人要高出多达30%。智慧对于解决一些任务也起着重要的作用。另外，智慧的高低也决定 了游戏结局的好坏。<br><br>　魅力(cha)：与其他属性相比，魅力只能排在最末尾了。<br>魅力高的玩家可以在买卖货物时有价格方面的优势 ，某些情形下还有更多的谈话选择。魅力值在15以上的话，会造成隐藏属性运气(Luck)，在战斗 中会有难度上的降低。<br><br>如果你想透彻地了解这个动人的故事,那游戏初期较好的属性选择为：<br>力量(str)为9<br>智力(int)为15<br>智慧(wis)为15<br>灵敏(dex)为15<br>体质(con)为15<br>魅力(cha)为9<br></p>
</span>
<img src ="http://www.cnblogs.com/telephoner/aggbug/818676.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41936/" target="_blank">[新闻]微软正在构思将Wi-Fi带入汽车</a>]]></description></item><item><title>zt  HOW TO：使用 Visual C# .NET 生成 Office COM 外接程序</title><link>http://www.cnblogs.com/telephoner/archive/2007/07/09/811287.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Mon, 09 Jul 2007 07:27:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2007/07/09/811287.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/811287.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2007/07/09/811287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/811287.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/811287.html</trackback:ping><description><![CDATA[<div class=notice>本文的发布号曾为 CHS302901</div>
<div class=notice></div>
<div class=toc id=tocDiv style="DISPLAY: block">
<h5>本页</h5>
<div depth="1"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>概要</span></a>
<div class=tocLine>
<div depth="2"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>IDTExensibility2 接口</span></a>
<div class=tocLine>
<div depth="3"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>OnConnection</span></a>
<div class=tocLine></div>
</div>
<div depth="3"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>OnDisconnection</span></a>
<div class=tocLine></div>
</div>
<div depth="3"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>OnAddInsUpdate</span></a>
<div class=tocLine></div>
</div>
<div depth="3"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>OnStartupComplete 和 OnBeginShutdown</span></a>
<div class=tocLine></div>
</div>
</div>
</div>
<div depth="2"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>COM 外接程序注册</span></a>
<div class=tocLine></div>
</div>
<div depth="2"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>如何使用 Visual C# .NET 生成 COM 外接程序</span></a>
<div class=tocLine></div>
</div>
<div depth="2"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>分步示例</span></a>
<div class=tocLine></div>
</div>
</div>
</div>
<div depth="1"><a onclick="return tocScrollTo(this);" href="http://support.microsoft.com/kb/302901/zh-cn#"><img alt="" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif"><span class=tocTxt>参考</span></a>
<div class=tocLine></div>
</div>
</div>
<script type=text/javascript>
var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'";
var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif";
var depthLimit = 10;
var depth3Limit = 10;
var depth4Limit = 5;
var depth5Limit = 3;
var tocEntryMinimum = 1;
</script>
<script src="/common/script/gsfx/kbtoc.js?8" type=text/javascript></script>
<noscript><style>.toc{display: none;}</style></noscript>
<div class=section>
<h2 class=subTitle id=tocHeadRef>概要</h2>
<script type=text/javascript>loadTOCNode(1, 'summary');</script>
<div class=sbody>Microsoft Office XP 和 Microsoft Office 2003 都支持一种新的统一的设计结构，这种结构用于生成应用程序外接程序以增强和控制 Office 应用程序。这些外接程序叫做 COM 外接程序。本文逐步讨论了 Office COM 外接程序，并介绍了如何使用 Microsoft Visual C# .NET 生成 Office COM 外接程序。 <br><br>
<p class=topOfPage><a href="http://support.microsoft.com/kb/302901/zh-cn#top"><img alt="" src="http://support.microsoft.com/library/images/support/en-us/uparrow.gif">回到顶端</a></p>
<h3 id=tocHeadRef><span><a id=2></a></span>IDTExensibility2 接口</h3>
<script type=text/javascript>loadTOCNode(2, 'summary');</script>
COM 外接程序是一种进程内 COM 服务器或 ActiveX 动态链接库 (DLL)，它实现如 Microsoft 外接程序设计器类型库 (Msaddndr.dll) 中所描述的 <strong>IDTExensibility2</strong> 接口。所有 COM 外接程序都从此接口继承而来，而且都必须实现其五个方法中的每一个方法。 <br><br>
<h4 id=tocHeadRef><span><a id=3></a></span>OnConnection</h4>
<script type=text/javascript>loadTOCNode(3, 'summary');</script>
每当连接 COM 外接程序时，都会激发 <strong>OnConnection</strong> 事件。外接程序可以在启动时连接、由最终用户连接或者通过自动化来连接。如果 <strong>OnConnection</strong> 成功地返回，就表明已加载了外接程序。如果返回错误消息，那么宿主应用程序就立即释放其对该外接程序的引用，而且该对象将被销毁。<br><br><strong>OnConnection</strong> 使用下列四个参数：
<table class="list ul">
    <tbody>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text><em>Application</em> — 一个对宿主应用程序对象的引用。</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text><em>ConnectMode</em> — 一个指定外接程序连接方式的常量。外接程序可以采取下列几种方式连接：
            <table class="list ul">
                <tbody>
                    <tr>
                        <td class=bullet>&#8226;</td>
                        <td class=text><strong>ext_cm_AfterStartup</strong> — 外接程序由最终用户从 <strong>COM 外接程序</strong> 对话框启动。</td>
                    </tr>
                    <tr>
                        <td class=bullet>&#8226;</td>
                        <td class=text><strong>ext_cm_CommandLine</strong> — 外接程序从命令行连接。注意，此方式不适用于生成 Office 应用程序的 COM 外接程序。</td>
                    </tr>
                    <tr>
                        <td class=bullet>&#8226;</td>
                        <td class=text><strong>ext_cm_External</strong> — 外接程序由外部应用程序通过自动化连接。请注意，此方式不适用于生成 Office 应用程序的 COM 外接程序。</td>
                    </tr>
                    <tr>
                        <td class=bullet>&#8226;</td>
                        <td class=text><strong>ext_cm_Startup</strong> — 外接程序由宿主在应用程序启动时启动。此行为由注册表中的设置来控制。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text><em>AddInInst</em> — 一个对 <strong>COMAddIn </strong>对象的引用，它引用宿主应用程序的<strong> COMAddIns </strong>集合中的此外接程序。</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text><em>Custom</em> — 一个包含 <strong>Variant</strong> 类型值的数组，它可以存储用户定义的数据。</td>
        </tr>
    </tbody>
</table>
<h4 id=tocHeadRef><span><a id=4></a></span>OnDisconnection</h4>
<script type=text/javascript>loadTOCNode(3, 'summary');</script>
当 COM 外接程序断开连接并且在它从内存中卸载之前，将激发 <strong>OnDisconnection</strong> 事件。外接程序应在此事件中执行所有资源清理操作，并还原对宿主应用程序所做的任何更改。<br><br><strong>OnDisconnection</strong> 使用下列两个参数：
<table class="list ul">
    <tbody>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text><em>RemoveMode</em> — 一个指定外接程序断开连接的方式的常量。外接程序可以采用下列方式断开连接：
            <table class="list ul">
                <tbody>
                    <tr>
                        <td class=bullet>&#8226;</td>
                        <td class=text><strong>ext_dm_HostShutdown</strong> —外接程序在宿主应用程序关闭时断开连接。</td>
                    </tr>
                    <tr>
                        <td class=bullet>&#8226;</td>
                        <td class=text><strong>ext_dm_UserClosed</strong> — 外接程序由最终用户或自动化控制器断开连接。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text><em>Custom</em> — 一个包含 <strong>Variant</strong> 类型值的数组，它可以存储用户定义的数据。</td>
        </tr>
    </tbody>
</table>
<h4 id=tocHeadRef><span><a id=5></a></span>OnAddInsUpdate</h4>
<script type=text/javascript>loadTOCNode(3, 'summary');</script>
当注册的 COM 外接程序集发生变化时，将激发 <strong>OnAddInsUpdate</strong> 事件。换言之，每当安装 COM 外接程序或者从宿主应用程序中删除 COM 外接程序时，都会激发此事件。 <br><br>
<h4 id=tocHeadRef><span><a id=6></a></span>OnStartupComplete 和 OnBeginShutdown</h4>
<script type=text/javascript>loadTOCNode(3, 'summary');</script>
当宿主应用程序在忙于向内存中加载自身或者从内存中卸载自身时应避免用户交互，而 <strong>OnStartupComplete</strong> 和 <strong>OnBeginShutdown</strong> 方法都是在宿主应用程序已离开或正要进入这一状态时被调用的。只有在启动期间已连接了外接程序的情况下才调用 <strong>OnStartupComplete</strong>，只有宿主在关闭过程中要断开与外接程序的连接的情况下才调用 <strong>OnBeginShutdown</strong>。<br><br>由于在激发这些事件时宿主应用程序的用户界面是完全活动的，因此它们可能是执行某些操作的唯一途径，以其他途径将无法从 <strong>OnConnection</strong> 和 <strong>OnDisconnection</strong> 中执行这些操作。 <br><br>
<p class=topOfPage><a href="http://support.microsoft.com/kb/302901/zh-cn#top"><img alt="" src="http://support.microsoft.com/library/images/support/en-us/uparrow.gif">回到顶端</a></p>
<h3 id=tocHeadRef><span><a id=7></a></span>COM 外接程序注册</h3>
<script type=text/javascript>loadTOCNode(2, 'summary');</script>
除了正常的 COM 注册外，COM 外接程序还需要向其运行所在的每一个 Office 应用程序注册自身。为了向特定应用程序注册其自身，外接程序应使用其 ProgID 作为项名称在以下位置下创建一个子项：
<div class=indent><strong>HKEY_CURRENT_USER\Software\Microsoft\Office\<var>OfficeApp</var>\Addins\<var>ProgID</var></strong></div>
外接程序可以在此项的位置为好记的显示名称和完整的说明提供值。此外，外接程序应使用一个名为 LoadBehavior 的 DWORD 值指定所希望的加载行为。此值确定宿主应用程序如何加载外接程序，而且它由下列值的组合组成：
<table class="list ul">
    <tbody>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>0 = Disconnect — 未加载。</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>1 = Connected — 已加载。</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>2 = Bootload — 在应用程序启动时加载。</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>8 = DemandLoad — 只在由用户请求时加载。</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>16 = ConnectFirstTime — 只加载一次（在下次启动时）。</td>
        </tr>
    </tbody>
</table>
通常指定 0x03 (Connected | Bootload) 这一典型的值。 <br><br>实现了 <strong>IDTExtensibility2</strong> 的外接程序还应指定一个名为 CommandLineSafe 的 DWORD 值，以指出外接程序对于不支持用户界面的操作是否安全。值为 0x00 表示 False，值为 0x01 则表示 True。 <br><br>
<p class=topOfPage><a href="http://support.microsoft.com/kb/302901/zh-cn#top"><img alt="" src="http://support.microsoft.com/library/images/support/en-us/uparrow.gif">回到顶端</a></p>
<h3 id=tocHeadRef><span><a id=8></a></span>如何使用 Visual C# .NET 生成 COM 外接程序</h3>
<script type=text/javascript>loadTOCNode(2, 'summary');</script>
如上文所述，Office COM 外接程序是由 Office 应用程序通过 COM 运行时层激活的进程内 COM 服务器。因此，为了在 .NET 中开发 COM 外接程序，外接程序组件需要在 .NET 中实现，然后通过 COM interop 层向 COM 客户端（即 Office 应用程序）公开。<br><br>要在 Visual C# .NET 中创建 COM 外接程序，请按照下列步骤操作：
<table class="list ol">
    <tbody>
        <tr>
            <td class=number>1.</td>
            <td class=text>在 Visual C# .NET 中，创建一个类库项目。</td>
        </tr>
        <tr>
            <td class=number>2.</td>
            <td class=text>添加一个对实现了 <strong>IDTExtensibility2</strong> 的类型库的引用。此项的主 interop 程序集已经出现在<strong> Extensibility </strong>名称下。</td>
        </tr>
        <tr>
            <td class=number>3.</td>
            <td class=text>添加一个对 Microsoft Office 对象库的引用。此项的主 interop 程序集已经出现在 <strong>Office</strong> 名称下。</td>
        </tr>
        <tr>
            <td class=number>4.</td>
            <td class=text>在实现了 <strong>IDTExtensibility2</strong> 的类库中创建一个公共类。</td>
        </tr>
        <tr>
            <td class=number>5.</td>
            <td class=text>生成该类库之后，将该库向 COM interop 进行注册。为此，需要为此类库生成一个使用强名称的程序集，然后将它注册到 COM interop。可以使用 Regasm.exe 来向 COM interop 注册 .NET 组件。</td>
        </tr>
        <tr>
            <td class=number>6.</td>
            <td class=text>创建注册表条目以使 Office 应用程序可以识别并加载外接程序。</td>
        </tr>
    </tbody>
</table>
您可以选择完成所有这些步骤，或可以创建类型为<strong>共享的外接程序</strong> 的 .NET 项目。这将启动&#8220;扩展性向导&#8221;，该向导可帮助您在 .NET 中创建 COM 外接程序。<br><br>&#8220;扩展性向导&#8221;将创建一个 Visual C# .NET 类库项目，同时创建一个实现了 <strong>IDTExtensibility2</strong> 接口的 <strong>Connect</strong> 类。它还会生成实现<strong> IDTExtensibility </strong>的空成员的主干代码。此项目具有对 Extensibility 和 Office 程序集的引用。该项目的生成设置中已选中了<strong>注册 COM interop</strong>。将生成程序集密钥 (.snk) 文件，并在 Assemblyinfo.vb 文件的 <strong>AssemblyKeyfile</strong> 属性中进行引用。<br><br>除类库项目外，该向导还将生成一个安装项目，该项目可用于在其他计算机上部署 COM 外接程序。在需要时可以删除此项目。<br><br>
<p class=topOfPage><a href="http://support.microsoft.com/kb/302901/zh-cn#top"><img alt="" src="http://support.microsoft.com/library/images/support/en-us/uparrow.gif">回到顶端</a></p>
<h3 id=tocHeadRef><span><a id=9></a></span>分步示例</h3>
<script type=text/javascript>loadTOCNode(2, 'summary');</script>
<table class="list ol">
    <tbody>
        <tr>
            <td class=number>1.</td>
            <td class=text>在 Microsoft Visual Studio .NET 的<strong>文件</strong>菜单上，单击<strong>新建</strong>，然后单击<strong>项目</strong>。</td>
        </tr>
        <tr>
            <td class=number>2.</td>
            <td class=text>在<strong>新建项目</strong>对话框中，展开<strong>项目类型</strong>下的<strong>其他项目</strong>，选择<strong>扩展性项目</strong>，然后选择<strong>共享的外接程序</strong>模板。</td>
        </tr>
        <tr>
            <td class=number>3.</td>
            <td class=text>键入 <span class=userInput>MyCOMAddin</span> 作为该外接程序的名称，然后单击<strong>确定</strong>。</td>
        </tr>
        <tr>
            <td class=number>4.</td>
            <td class=text>&#8220;扩展性向导&#8221;出现后，请按照下列步骤操作：
            <table class="list al">
                <tbody>
                    <tr>
                        <td class=number>a. </td>
                        <td class=text>在第 1 页，选择<strong>使用 Visual C# 创建外接程序</strong>，然后单击<strong>下一步</strong>。</td>
                    </tr>
                    <tr>
                        <td class=number>b. </td>
                        <td class=text>在第 2 页，选择下面的宿主应用程序，然后单击<strong>下一步</strong>：
                        <table class="list ul">
                            <tbody>
                                <tr>
                                    <td class=bullet>&#8226;</td>
                                    <td class=text>Microsoft Word</td>
                                </tr>
                                <tr>
                                    <td class=bullet>&#8226;</td>
                                    <td class=text>Microsoft PowerPoint</td>
                                </tr>
                                <tr>
                                    <td class=bullet>&#8226;</td>
                                    <td class=text>Microsoft Outlook</td>
                                </tr>
                                <tr>
                                    <td class=bullet>&#8226;</td>
                                    <td class=text>Microsoft Excel</td>
                                </tr>
                                <tr>
                                    <td class=bullet>&#8226;</td>
                                    <td class=text>Microsoft Access</td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                    <tr>
                        <td class=number>c. </td>
                        <td class=text>在第 3 页上，输入该外接程序的名称和描述，然后单击<strong>下一步</strong>。<br><br><strong>注意</strong>：该外接程序的名称和描述出现在 Office 应用程序的 <strong>COM 加载项</strong>对话框中。<br><br></td>
                    </tr>
                    <tr>
                        <td class=number>d. </td>
                        <td class=text>在第 4 页，选择所有可用的选项，然后单击<strong>下一步</strong>。</td>
                    </tr>
                    <tr>
                        <td class=number>e. </td>
                        <td class=text>单击<strong>完成</strong>。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td class=number>5.</td>
            <td class=text>在<strong>项目</strong>菜单上，单击<strong>添加引用</strong>。单击组件列表中的 <strong>System.Windows.Forms.DLL</strong>，单击<strong>选择</strong>，然后单击<strong>确定</strong>。</td>
        </tr>
        <tr>
            <td class=number>6.</td>
            <td class=text>将下列代码添加到 <strong>Connect</strong> 类中的名称空间列表中：<code>
            <pre class=code>using System.Reflection;</pre>
            </code></td>
        </tr>
        <tr>
            <td class=number>7.</td>
            <td class=text>将下列成员添加到 <strong>Connect</strong> 类中：<code>
            <pre class=code>private CommandBarButton MyButton; </pre>
            </code></td>
        </tr>
        <tr>
            <td class=number>8.</td>
            <td class=text>在 <strong>Connect</strong> 类中实现 <strong>IDTExtensibility2</strong> 的成员的代码，如下所示：<code>
            <pre class=code>public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) {
            applicationObject = application;
            addInInstance = addInInst;
            if(connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup)
            {
            OnStartupComplete(ref custom);
            }
            }
            public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom) {
            if(disconnectMode != Extensibility.ext_DisconnectMode.ext_dm_HostShutdown)
            {
            OnBeginShutdown(ref custom);
            }
            applicationObject = null;
            }
            public void OnAddInsUpdate(ref System.Array custom)
            {
            }
            public void OnStartupComplete(ref System.Array custom)
            {
            CommandBars oCommandBars;
            CommandBar oStandardBar;
            try
            {
            oCommandBars = (CommandBars)applicationObject.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty , null, applicationObject ,null);
            }
            catch(Exception)
            {
            // Outlook has the CommandBars collection on the Explorer object.
            object oActiveExplorer;
            oActiveExplorer= applicationObject.GetType().InvokeMember("ActiveExplorer",BindingFlags.GetProperty,null,applicationObject,null);
            oCommandBars= (CommandBars)oActiveExplorer.GetType().InvokeMember("CommandBars",BindingFlags.GetProperty,null,oActiveExplorer,null);
            }
            // Set up a custom button on the "Standard" commandbar.
            try
            {
            oStandardBar = oCommandBars["Standard"];
            }
            catch(Exception)
            {
            // Access names its main toolbar Database.
            oStandardBar = oCommandBars["Database"];
            }
            // In case the button was not deleted, use the exiting one.
            try
            {
            MyButton = (CommandBarButton)oStandardBar.Controls["My Custom Button"];
            }
            catch(Exception)
            {
            object omissing = System.Reflection.Missing.Value ;
            MyButton = (CommandBarButton) oStandardBar.Controls.Add(1, omissing , omissing , omissing , omissing);
            MyButton.Caption = "My Custom Button";
            MyButton.Style = MsoButtonStyle.msoButtonCaption;
            }
            // The following items are optional, but recommended.
            //The Tag property lets you quickly find the control
            //and helps MSO keep track of it when more than
            //one application window is visible. The property is required
            //by some Office applications and should be provided.
            MyButton.Tag = "My Custom Button";
            // The OnAction property is optional but recommended.
            //It should be set to the ProgID of the add-in, so that if
            //the add-in is not loaded when a user presses the button,
            //MSO loads the add-in automatically and then raises
            //the Click event for the add-in to handle.
            MyButton.OnAction = "!&lt;MyCOMAddin.Connect&gt;";
            MyButton.Visible = true;
            MyButton.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.MyButton_Click);
            object oName = applicationObject.GetType().InvokeMember("Name",BindingFlags.GetProperty,null,applicationObject,null);
            // Display a simple message to show which application you started in.
            System.Windows.Forms.MessageBox.Show("This Addin is loaded by " + oName.ToString()   , "MyCOMAddin");
            oStandardBar = null;
            oCommandBars = null;
            }
            public void OnBeginShutdown(ref System.Array custom)
            {
            object omissing = System.Reflection.Missing.Value ;
            System.Windows.Forms.MessageBox.Show("MyCOMAddin Add-in is unloading.");
            MyButton.Delete(omissing);
            MyButton = null;
            }
            private void MyButton_Click(CommandBarButton cmdBarbutton,ref bool cancel) {
            System.Windows.Forms.MessageBox.Show("MyButton was Clicked","MyCOMAddin"); }
            </pre>
            </code></td>
        </tr>
        <tr>
            <td class=number>9.</td>
            <td class=text>生成并测试该 COM 外接程序。为此，请按照下列步骤操作：
            <table class="list al">
                <tbody>
                    <tr>
                        <td class=number>a. </td>
                        <td class=text>在<strong>生成</strong>菜单上，单击<strong>生成解决方案</strong>。请注意，生成 COM 外接程序的过程中实际上就向 COM interop 注册了 .NET 类。</td>
                    </tr>
                    <tr>
                        <td class=number>b. </td>
                        <td class=text>启动一个您选作外接程序的宿主应用程序的 Office 应用程序（例如，Microsoft Word 或 Microsoft Excel）。</td>
                    </tr>
                    <tr>
                        <td class=number>c. </td>
                        <td class=text>外接程序启动之后，将激发其 <strong>OnStartupComplete</strong> 事件，您会收到一个消息框。请关闭该消息框。请注意，外接程序向标准工具栏中添加了一个新的标题为&#8220;My Custom Button&#8221;（我的自定义按钮）的自定义按钮。</td>
                    </tr>
                    <tr>
                        <td class=number>d. </td>
                        <td class=text>单击 <strong>My Custom Button（我的自定义按钮）</strong>。该按钮的<strong> Click </strong>事件将由外接程序来处理，而且您会收到一个消息框。请关闭该消息框。</td>
                    </tr>
                    <tr>
                        <td class=number>e. </td>
                        <td class=text>退出该 Office 应用程序。</td>
                    </tr>
                    <tr>
                        <td class=number>f. </td>
                        <td class=text>退出该应用程序时，将激发 <strong>OnBeginShutDown</strong> 事件，您会收到一个消息框。关闭该消息框以结束演示。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</div>
</div>
<h5>这篇文章中的信息适用于:</h5>
<table class=list>
    <tbody>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Visual C# .NET 2003 标准版</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Visual C# .NET 2002 标准版</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Office Excel 2003</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Excel 2002 标准版</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Office Outlook 2003</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Outlook 2002 标准版</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Office PowerPoint 2003</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft PowerPoint 2002 标准版</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Office Word 2003</td>
        </tr>
        <tr>
            <td class=bullet>&#8226;</td>
            <td class=text>Microsoft Word 2002 标准版</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cnblogs.com/telephoner/aggbug/811287.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41935/" target="_blank">[新闻]对比测试：IE8 Beta 2 VS Firefox 3.0.1</a>]]></description></item><item><title>.net 2.0 里面操作配置文件 的问题 (读取另外的配置文件的时候的疑问)</title><link>http://www.cnblogs.com/telephoner/archive/2007/07/07/809374.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Sat, 07 Jul 2007 03:35:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2007/07/07/809374.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/809374.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2007/07/07/809374.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/809374.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/809374.html</trackback:ping><description><![CDATA[<p>有一个问题,遍寻网上而不见.</p>
<p>在vs2005中,如果不读取默认的app.config文件,而是读取自定义的配置文件.</p>
<p>需要用system.configuration.configuration a=configurationmanager.openexeconfiguration(配置文件路径);</p>
<p>然后我获取appsettings,</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 99.4%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 99px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;appPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;System.Windows.Forms.Application.StartupPath;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;configPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;appPath&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\DocAddin.dll.config</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Configuration.Configuration&nbsp;config</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;dbPath</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">config.AppSettings.Settings[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DBPath</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].Value;</span></div>
<p>&nbsp;结果发现appsettings的settings集合里面是空的.根本一个键值对都没有.</p>
<p>我的config文件里面是这样定义的</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #000000">xml&nbsp;version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">utf-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">?&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">configuration</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">appSettings</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">add&nbsp;key</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DBPath</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">D:\Program&nbsp;Files\默认公司名称\SetupForDocAddin\DOCDB.mdb</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">add&nbsp;key</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MachineID</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DefaultMachine</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">appSettings</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">configuration</span><span style="COLOR: #000000">&gt;</span></div>
<br>最后发现:<br>&nbsp;<mshelp:link tabIndex=0 keywords="T:System.Configuration.ConfigurationSettings">ConfigurationSettings</mshelp:link> .AppSettings<br>ConfigurationManager.AppSettings<br>Configuration.AppSettings.都不一样 .<br><br>正在继续研究中 .
<img src ="http://www.cnblogs.com/telephoner/aggbug/809374.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41934/" target="_blank">[新闻]iPhone存在严重密码安全漏洞</a>]]></description></item><item><title>zt西游记IT团队的裁人问题</title><link>http://www.cnblogs.com/telephoner/archive/2007/06/19/788515.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Tue, 19 Jun 2007 01:30:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2007/06/19/788515.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/788515.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2007/06/19/788515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/788515.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/788515.html</trackback:ping><description><![CDATA[<div id=articleText>
<p><font face=Arial>为了节约成本，要在西游记团队中栽一个你会裁掉哪位？</font></p>
<p><font face=Arial>背景：为了完成西天取经任务，组成取经团队，成员有唐僧、孙悟空、猪八戒、沙和尚。其中唐僧是项目经理、孙悟空是技术核心、猪八戒和沙和尚是普通团员。这人团队的高层领导是观音。</font></p>
<p><font face=Arial>团队的组成很有意思。唐僧作为项目经理PM，有很坚韧的品性和极高的原则性，不达目的不罢休，又很得上司支持和赏识（直接得到唐太宗的任命，既给袈裟，又给金碗；又得到以观音为首的各路神仙的广泛支持和帮助）。</font></p>
<p><font face=Arial>沙和尚言语不多，任劳任怨，承担了项目中挑担这种粗笨无聊的工作。</font></p>
<p><font face=Arial>猪八戒这个成员，看起来好吃懒做，贪财好色，又不肯干活，最多牵下马，好象留在团队里没有什么用处，其实他的存在还是有很大用处的，因为他性格开朗，能够接受任何批语而毫无负担压力，在<a href="http://www.it130.cn/">项目</a>组中承担了润滑油的作用。</font></p>
<p><font face=Arial>最关键的还是孙悟空，由于孙悟空是这个取经团队里的核心，但是他的性格极极端，回想他那大闹天空的历史，恐怕作为普通人来说没有人会让这种人呆在团队里。</font></p>
<p><font face=Arial>那就请分析一下：为了节约成本，需要在这个团队里裁掉一个队员，你会裁哪一位？为什么?</font></p>
<p><font face=Arial>呵呵，这个话题现在很火，咱给加个白龙马。白龙马的工作职责更简单，就是负责伺候唐僧。团队里起到一个小蜜的角色，唐僧能好好干活，全靠小蜜拉！领导的小蜜能随便裁嘛？</font></p>
</div>
<img src ="http://www.cnblogs.com/telephoner/aggbug/788515.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41931/" target="_blank">[新闻]GC2008：星际争霸2进程报告 微调进程延续</a>]]></description></item><item><title>研究了一下SqlExpress中的外键约束</title><link>http://www.cnblogs.com/telephoner/archive/2007/06/02/769056.html</link><dc:creator>马维拉的真实之眼</dc:creator><author>马维拉的真实之眼</author><pubDate>Sat, 02 Jun 2007 15:01:00 GMT</pubDate><guid>http://www.cnblogs.com/telephoner/archive/2007/06/02/769056.html</guid><wfw:comment>http://www.cnblogs.com/telephoner/comments/769056.html</wfw:comment><comments>http://www.cnblogs.com/telephoner/archive/2007/06/02/769056.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/telephoner/comments/commentRss/769056.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/telephoner/services/trackbacks/769056.html</trackback:ping><description><![CDATA[以前用数据库,一般都建表关系,但是这些关系建好了往往没有用到.<br><br>这次写一个项目,涉及到多表的外键约束和级联删除的问题,才研究了一下.<br><br>用的vs2005里面自带的SqlExpress,在VS里面作数据库,感觉不是很方便(废话,都方便了,那sqlserver2005 dev 卖给谁去!)<br><br>我建了表,然后建了关系,设定了外键约束.<br><br>然后就以为万事大吉了,去写代码,画界面去了.<br><br>把代码和界面搞定后,一试验删除,删除的级联链中间的一个表的数据,然后就报错.<br><br>
<fieldset style="WIDTH: 766px; HEIGHT: 192px"><legend title=报错内容>Title</legend>
<h2><em>DELETE 语句与 REFERENCE 约束"FK_课程扩展信息表_教师表"冲突。该冲突发生于数据库"x:\xxx.MDF"，表"dbo.课程扩展信息表", column '教师编号'。<br>语句已终止。</em> </h2>
</fieldset><br><br>然后研究了下外键约束.到底是怎么回事.网上搜到一篇定义:<br>
<fieldset><legend>Title</legend>
<h6>FOREIGN KEY 约束</h6>
<ul type=disc>
    <li>如果在 FOREIGN KEY 约束的列中输入非 NULL 值，则此值必须在被引用的列中存在，否则将返回违反外键约束的错误信息。 <br><br>
    <li>FOREIGN KEY 约束应用于前面所讲的列，除非指定了源列。<br><br>
    <li>FOREIGN KEY 约束仅能引用位于同一服务器上的同一数据库中的表。数据库间的引用完整性必须通过触发器实现。有关更多信息，请参见 <a href="mk:@MSITStore:C:%5CProgram%20Files%5CMicrosoft%20SQL%20Server%5C80%5CTools%5CBooks%5Ctsqlref.chm::/ts_create2_7eeq.htm">CREATE TRIGGER</a>。 <br><br>
    <li>FOREIGN KEY 可以引用同一表中的其它列（自引用）。<br><br>
    <li>列级 FOREIGN KEY 约束的 REFERENCES 子句仅能列出一个引用列，且该列必须与定义约束的列具有相同的数据类型。<br><br>
    <li>表级 FOREIGN KEY 约束的 REFERENCES 子句中引用列的数目必须与约束列列表中的列数相同。每个引用列的数据类型也必须与列表中相应列的数据类型相同。<br><br>
    <li>如果 <span style="FONT-WEIGHT: bold">timestamp</span> 类型的列是外键或被引用键的一部分，则不能指定 CASCADE。<br><br>
    <li>可以在相互间具有引用关系的表上组合使用 CASCADE 和 NO ACTION。如果 SQL Server 遇到 NO ACTION，将终止执行语句并回滚相关的 CASCADE 操作。当 DELETE 语句导致 CASCADE 和 NO ACTION 组合操作时，在 SQL Server 检查 NO ACTION 操作之前将执行所有 CASCADE 操作。<br><br>
    <li>一个表最多可包含 253 个 FOREIGN KEY 约束。<br><br>
    <li>对于临时表不强制 FOREIGN KEY 约束。<br><br>
    <li>每个表在其 FOREIGN KEY 约束中最多可以引用 253 个不同的表。<br><br>
    <li>FOREIGN KEY 约束只能引用被引用表的 PRIMARY KEY 或 UNIQUE 约束中的列或被引用表上 UNIQUE INDEX 中的列。 </li>
</ul>
</fieldset><br>仍然不解其意.<br><br>然后在关系图中的关系上点击右键,查看属性,发现其"<span style="COLOR: red">INSERT 和 UPDATE 规范类别</span> "内都是"无操作",感觉应该是这里的问题.<br>上msdn上搜索了一下,发现了这篇文章: <span id=runningHeaderText style="COLOR: red">可视化数据库工具-<span id=nsrTitle>外键列属性</span></span><br>ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vdt01/html/2cb23e81-6342-4390-9d0e-b7a4805eca0f.htm<br>关键的几句在这里:<br><br>
<fieldset><legend>Title</legend>
<dl>
<dt>INSERT 和 UPDATE 规范类别
<dd>
<p>展开以显示有关该关系的&#8220;删除规则&#8221;和&#8220;更新规则&#8221;的信息。</p>
</dd></dl>
<dl>
<dt>删除规则
<dd>
<p>指定当数据库的最终用户尝试删除某一行，而该行包含外键关系所涉及的数据时所发生的情况。如果设置为：</p>
<ul>
    <li>
    <p>无操作&nbsp;&nbsp;&nbsp;显示一条错误信息，告知用户不允许执行该删除操作，DELETE 将被回滚。</p>
    <li>
    <p>级联&nbsp;&nbsp;&nbsp;删除包含外键关系中所涉及的数据的所有行。</p>
    <li>
    <p>设置空&nbsp;&nbsp;&nbsp;如果表的所有外键列都可接受空值，则将该值设置为空。仅适用于 SQL Server 2005。</p>
    <li>
    <p>设置默认值&nbsp;&nbsp;&nbsp;如果表的所有外键列均已定义默认值，则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。</p>
    </li>
</ul>
</dd></dl>
<dl>
<dt>更新规则
<dd>
<p>指定当数据库的用户尝试更新某一行，而该行包含外键关系所涉及的数据时所发生的情况。如果设置为：</p>
<ul>
    <li>
    <p>无操作&nbsp;&nbsp;&nbsp;显示一条错误信息，告知用户不允许执行该删除操作，DELETE 将被回滚。</p>
    <li>
    <p>级联&nbsp;&nbsp;&nbsp;删除包含外键关系中所涉及的数据的所有行。</p>
    <li>
    <p>设置空&nbsp;&nbsp;&nbsp;如果表的所有外键列都可接受空值，则将该值设置为空。仅适用于 SQL Server 2005。</p>
    <li>
    <p>设置默认值&nbsp;&nbsp;&nbsp;如果表的所有外键列均已定义默认值，则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。</p>
    </li>
</ul>
</dd></dl></fieldset><br><br>总算是明白了:<br>1.在vs2005中,外键约束的属性窗口中它不叫"级联",叫"层叠",估计是翻译错误.<br>2.vs2005中,在关系图中建立外键约束,它<span style="COLOR: red">"默认的INSERT 和 UPDATE 规范"都是"无操作".<br></span>&nbsp;&nbsp; 也就是说,你只要更新或删除,它都会报错.<br>3.解决的方法:<br>&nbsp;&nbsp; a.删除的时候好办,级联删除就可以了.但更新的时候还得好好考虑.<br>&nbsp;&nbsp; b.或者干脆去掉外键约束,自己考虑,然后写transcation sql.<br><br><br><br><br><br><br><br><br><br><br>
<img src ="http://www.cnblogs.com/telephoner/aggbug/769056.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41930/" target="_blank">[新闻]科学家在世界最大对撞机中观察到首批粒子</a>]]></description></item></channel></rss>