摘要:插件项目所有代码都已经上传至 https://github.com/VanPan/TestOutlookAdding 勿在浮砂筑高台——定位错误 在介绍后面的插件开发技术之前,让我们先来看看已经达到的成果:我们已经创建了第一个项目,并且也已经在Outlook里面运行起来了。 但是一定还是有人想知道,插件到底是如何挂接到Outlook里面去的?如果我们发现插件始终无法出现,到底如何排查问题原因? ...
阅读全文
摘要:这半年一直在做Outlook的插件,因为不会VC++,所以想找一款基于.NET,用C#开发Outlook插件的技术方案。没想到,光技术选型这件事,就用各种技术手段验证了将近一个月,还花费了大量的精力做之后的各项开发工作。在此开个大坑,以此记录所有的技术成果,如果以后还有别的朋友要做Outlook,甚至于Office插件,都可以从这儿作为起步,因为Office插件的基础技术都是一致的,只是到了各个产品内部COM对象有特性差异。好了,废话不多说,我们开始正文。技术选型如果提到要做Office插件,大家都会去网上找,当然最快得到的一个应该就是VSTO。虽然我们最后没有采用这个方案,但是我还是想在这儿
阅读全文
摘要:自定义产品卸载方式 继续从上一次的基础上前进,现在我们已经知道了最简单的bootstrapper打包方法,现在我们对其中的每个节点深入自定义,争取可以达到我们需要的效果。先把最后全部的XML贴出来。 Bundle节点前面几个属性我们都已经知道了,IconSourceFile就是打包后exe的图标设置,DisableRemove、DisableModify这两个属性比较有讲究,他们分别设置了在“添加/删除程序”列表中,选中安装包后鼠标右击,是否会出现“卸载”...
阅读全文
摘要:Visual Studio 打包安装七宗罪开发.NET的人,肯定会使用Visual Studio里面自带的MSI打包安装工具框架。如果是在一般情况下,这个打包安装框架已经完全足够满足产品发布安装的需要了。它的制成品,是一个setup.exe,一个MSI安装文件,如果你选择项目以来的其他.NET,Windows Install 框架,并且确定随产品发布,那制成品中还会包含这些东西的安装文件。 但是VS打包发布出来的安装包,安装体验实在是非常差,举个例子,如果你的项目是依赖于.NET 4.0以及VC++ 2010,并且你的目标客户机中没有安装过任何该类产品,那当你执行setup.exe的时候,先是
阅读全文
摘要:/// /// Calculate Text Edit Distance Utility Class /// public static class TextEditDistanceUtility { /// /// get edit distance between two string /// /// /// /// public static int GetEditDistance(string str1, string str2) ...
阅读全文
摘要:如果你正在做ASP.NET,那肯定会用到IIS如果你想在ASP.NET Application中加入某个定时任务,那想必一定是用一个线程在不停地做定时计算那假设我们在自己的ASP.NET应用程序中加入了Quartz.NET框架,并且配置等等都OK了。这个站点访问量很少,现在只有几个人上班的时候才会使用,结果第二天过来一看,后台调度的线程和计算任务都停止了,如果你抓取了Application_End事件,会发现这个事件居然被调用了。那一定是IIS的应用程序池回收的机制在作怪了。因为IIS的默认设置里面,如果一个站点所处的应用程序池超过一段时间没有被访问或者请求,IIS就会自动回收这个程序池,并且
阅读全文
摘要:如果你是用Visual Studio自带的打包项目打包了一个Installer,并且生成的.msi和setup.exe安装文件,并且在项目安装系统必备环境中选择了"Visual C++ 2010运行库(x86)",那你一定会发现,点击setup.exe安装以后,如果再次点击setup.exe安装文件,一定会需要再次安装C++运行环境,好像每次都不能通过C++已安装的前提条件。原因是,居然是微软的C++运行环境产品Product Code改了!解决方案如下找到这个文件C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Boo
阅读全文
摘要:C# 5.0 即将迎来async和await关键字,事实上现在已经可以体验使用了,下载Microsoft Visual Studio Async CTP 后安装,即可在VS2010中体验这两个关键字的乐趣。(Microsoft Visual Studio Async CTP 可能和一些VS的补丁有冲突,详细下载安装情况,请查看http://www.cnblogs.com/jeekun/archive/2011/09/28/2193950.html现在我们把注意力回到这两个关键字的使用上来,大家一定知道这两个关键字是用来进行异步操作的,其实,这两个关键字没有什么奥秘可言,async必须加在函数声
阅读全文
摘要:嗯,现在有个问题的确摆在了我们眼前,不管怎么样,不能靠类库吃一辈子吧?总要学会自己构建一个服务器的吧。那好,我们来制作一个服务器吧。创建一个windows控制台项目,命名为Host对Host添加.NET System.ServiceModel名空间引用对Host添加刚才生成的WCF项目,注意,不是引用服务,就是引用本地项目类库,我们的目标是不再使用wcf默认的服务器了。然后对Host项目添加项目配置文件App.config将WCF类库中自动生成的App.config内容原封不动的全部拷贝到Host项目的App.config中编写Host中的主文件如下namespace Host{ cla...
阅读全文
摘要:第一步,打开VS 2008,然后新建一个项目,项目使用WCF类型,具体选择“WCF类库”。什么都不用改,直接设置新建好了的WCF类库项目为启动项目,Ctrl+F5开始运行。什么?类库不能直接运行?你且试试。系统托盘会出现一个WCF服务主机的小图标,点击,查看这个WCF项目被分配为什么访问路径。这样我们就新建好了一个WCF服务,其中的代码应该是默认的。IService1.csusing System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.
阅读全文
摘要:感谢谭振林先生所著《道不远人——深入解析ASP.NET 2.0控件开发》ASP.NET现在使用的朋友是越来越多了,而其中一些很“方便”的控件事实上在实际使用过程中却不是那么方便。还好,我们有办法改善它们,或者是继承现有控件后扩展,或者是继承Control或者CompositeControl重写一个新的控件。这些方法请参见《道不远人》,小凡用在此书中学到的知识重写了很多控件,今天为大家介绍——AutoCheckTreeView顾名思义,AutoCheckTreeView是由TreeView继承而来。相信大家都用过TreeView,好处自然不用多说,那我们来回忆批斗一下这个控件的不足之处吧。一,T
阅读全文
摘要:重新回到那个用了很多次的语句: IEnumerablenumQuery=numbers.Where((number)=>number%2==0); 我们知道了Where是扩展方法,但是后面的(number) => number % 2 == 0又是什么?功能一看就明白了,就是选择是偶数的数字,但是深层机理又是什么样子的? 查一下MSDN,原来这种表达式也是3.0新增的东东,叫Lambda表达式。它的语法小凡就不再介绍,MSDN中有很详细的说明,再说也是狗尾续貂。但是,除了用Lambda表达式,像这样的函数还能传入什么形参?是不是只能用Lambda表达式了呢? 答案当然是不会的,如果
阅读全文
摘要:说完了LINQ的语言支持和语法灵活,下面就是一个非常有用的东东——扩展方法(Extension Method)。还记得我们看了好几遍的LINQ吧,下面这个:varnumQuery=fromnuminnumberswhere(num%2)==0selectnum;第一次讨论的时候我们讲到它等同于:IEnumerablenumQuery=numbers.Where((number)=>number%2==0);如果用2.0很熟悉的朋友,会知道Where函数是3.0新增的,同时新增的还有Sum,Count等一系列方法,在MSDN 2008中,我们可以看到这些函数归属于IEnumerable泛型
阅读全文
摘要:接着上一次的程序我们继续分析探讨,LINQ语句如下:varnumQuery=fromnuminnumberswhere(num%2)==0selectnum;小凡第一次看到这个语句时,第一个念头是:为什么select要放在最后?事实上,写惯了SQL,大家都觉得SELECT放在前面才是最舒服的。问题是:为什么SELECT一定要放在前面?因为SQL放在前面吗?SELECT放在前面一定方便吗?让我们回忆一下写SQL语句时的尴尬,我想大多数人都是和小凡这样的。我们设想下面一种写SQL的情况,有5张表要做互相连接,并且5张表每个表中要取3个字段,那我们的FROM肯定是洋洋洒洒的:FROM TABLE_A
阅读全文
摘要:“科技,以人为本”,这句话是不是NOKIA自创的小凡不得而知,不过,在这方面做的最好的微软实在是要在里面占上一个很有力的位置。且不说微软的操作系统进步有目共睹(当然也有如VISTA一般敢于吃螃蟹却因为华而不实遭到放弃的实例),事实上,在.NET项目中,对于C#语言和一些编程风格上的改进的确让小凡觉得处处都是为人着想。说到.NET 3.0,最大的变化当属LINQ和Lambda表达式,我们先从LINQ入手,看看为了实现LINQ的功能,分析微软做了多少工作。一,MSDN的示例classIntroToLINQ{staticvoidMain(){//TheThreePartsofaLINQQuery:
阅读全文