未标明原创的文章皆为转载~

(转)DXperience 源码编译及发布指南 for VS2008

转载自:DXperience 源码编译及发布指南 for VS2008

 这是我在看了别人的一篇用VS2005编译7.1的版本后自己用VS2008编译8.2.6时记下的,以供大家参考:

1. 为了文档和示例,麻烦各位先去官网下载一个 for VS2008 的 Eval (我用的是 v8.2.6 );

2. 下回来自然就是安装,一路回车,最后有个地方问你要不要 merge,你 merge 了最好,帮助就和 MSDN 集成了;你不 merge 也不怪你;

3. 解开你心爱的源码包,你要解哪里都行,那么多个文件夹你别扔根目录就行了;

4. 打开 VS2008,新建一个空白解决方案,然后,就把刚才解开的文件里的每个项目,一个一个加到解决方案里去(有些文件夹进去,直接看不到项目文件,那就得再进一层),如果没数错,最后一共是64个项目(总之,你需要点耐心完成这个使命);

5. 好了,接下来就是生成你的强名称数字签名文件,听起来有点先进,不过就是到命令行执行一下:sn -k StrongKey.snk(别告诉我你执行的时候报错,那是因为你没这样进入命令行:“开始”-“Microsoft Visual Studio 2008”-Visual Studio Tools”-“Visual Studio 2008 命令提示行”);建议你最好先CD(给鲜用 DOS 的兄弟姐妹:这个是命令行模式下切换目录的命令)到源码解压的地方,进入到 DevExpress.Key 文件夹,然后再执行这个命令,这样免得你满硬盘找生成的 SNK 文件(就是那个“先进”的东西),因为这个东西必须最终在 DevExpress.Key 文件夹安家;

6.生成StrongKey.snk文件之后,还要再导出你的公钥:第一步:sn -p StrongKey.snk key.txt 第二步:sn -tp key.txt 
这时你看到了吧,那一长串字符就是你的公钥,分别记下公钥和公钥标记,我们在后面还要用到。

7. 再 Next 嘛,就是我们艰辛的编译过程了;必须明确的是编译顺序,因为64个项目互相勾引着,稍不注意,就要打架的;

8. 编译顺序如下:DevExpress.Data DevExpress.Utils DevExpress.XtraEditors DevExpress.XtraNavBar DevExpress.XtraGrid,剩下的顺序乱了问题不大;我只说了个大概顺序,由于项目较多,还是请您自己编译的时候留心有顺序问题,从项目引用就能看出来;编译通不过就先编译其他的;实践证明,最终除了 DevExpress.Xpo.Providers 和 DevExpress.Xpo.Providers.Compact 都能通过(这两个项目编译不过的原因是其需要第三方的库支持,如 DB2、Oracle 的等等,用不上就不管,要用的话自己先找到对应的 DLL 才行)。

9. 为什么要注意顺序呢?如同有了你爸爸,才有了你自己,不可能说先有了你自己才有你爸爸,大家讲道理嘛!源码包里的项目也是这样,我要引用你,但你又得引用他,在你没引用他之前,我就找不到地方去引用你;因为源码包里项目的引用都是根据程序集的 Token 来的(Token 什么意思,简单说就是一个 SNK 文件对应一个Token),解压后有个文件夹 DevExpress.DLL,里面全是评估版的 DLL,这些 DLL 都是通过会被程序代码识别为评估版的 SNK 生成的,如果编译的时候 Token 不匹配,就会报错,还会是一大堆错,直到你先编译生成新的被引用的 DLL,Token 得到更新,该项目的编译才不会报错;以后编译的时候,如果 SNK 文件没变,那你就改了哪个项目就单独编哪个吧,不再需要再注意顺序了,这又为什么呢?因为在你第一次编译的时候,所有的程序集都生成了新的 DLL,这些 DLL 的 Token 根据你的 SNK 文件已经确定了下来,并且都在 DevExpress.DLL 里留了下来,编译的时候就不会说找不到了;

10. 为什么要汉化?因为控件里用于呈现给客户的地方,只要有字的,如上下文菜单,都会是英文的,谁叫 Dev 公司在 LasVegas 而不是 Macao,而你要开发的软件,又都是给说中国话的人用的(我指绝大多数);那怎么汉化呢?凡是你在项目文件夹下看到 LocalizationRes.resx 文件的,你都可以用鼠标轻轻点开它,并小心修改之,再说简单点就是把右边列的英文内容改成你要的汉字,再编译一次就变中文啦!

11. 编译还需要注意的:所有 DevExpress 的控件引用地址是 C:\Program Files\...,遇到这种,请你直接添加对应控件项目到引用(别加 DLL 了。如果引用项目里没有对应的,说明你还没在解决方案中加入该项目),再把对应的DLL引用删除掉(最是后面显示带有v8.2的,这全是,也可以和你加入的项目引用做一下对比,免得你DEL了后编译时找不到引用),再回过头编译就好了;

12.打开DevExpress.Web.ASPxScheduler 项目中的AssemblyInfo.cs 文件,在倒数第4行你发现有 “PublicKey=”这么一段,后面与我第6步生成的公钥怎么那么像呢!?那就替掉吧,好像有6到7处吧。

13. 有两个项目,请你不要编译:DevExpress.Xpo.Providers and DevExpress .Xpo.Providers.Compact,为什么?两个项目都引用了第三方的 DLL,源码包里是没有的,比如 IBM 的、Oracle 的,需要的话可以自己去找找;

14. 终于编译完毕,请你打开 DevExpress.DLL 目录,把里面的所有 DLL 文件 Ctrl+C 一下,然后请你打开安装评估版的文件夹,定位到 C:\Program Files\Developer Express .NET 2008 v8.2\Sources\DevExpress.DLL(默认安装情况下),Ctrl+V 一下,覆盖掉评估版的DLL;

15. 还没完,另开一个窗口,定位到 C:\Windows\Assembly,里面已有的 DevExpress 的库请不要删除,这样 Eval 带的 Demo 和 Tools 才能正常运行(Tools都没源码,找不到 Eval 的库就没法用了),然后从刚才的窗口 C:\Program Files\Developer Express .NET 2008 v8.2\Sources\DevExpress.DLL,把所有 DLL “拖”到这个 Assembly 里,注意,这是 GAC(GAC 是什么?今天你谷歌了吗?),只能用拖的,不能用粘贴(你粘不过来的),这下 GAC 里就有新的 DevExpress 控件 DLL 了;

16. 接着,把你的 VS2008 关掉,然后点“开始”-“Developer Express .NET 2008 v8.2”-“Tools”-“ToolboxCreator”,运行完后 VS 工具栏就更新了,而且分类也没乱;为什么要更新?还是因为 Token;

17. 为了确保添加报表文件时调用向导不出错,最后 N 步,请你打开文件夹:C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp、VisualBasic、Web\CSharp、Web\VisualBasic解压 XtraReportWizard.v8.2.zip、XpoClasses.v8.2.zip、XtraReport.v8.2.zip 等文件;然后,用记事本打开 XtraReport.vstemplate、Class.vstemplate 文件,浏览到后面,看到 PublicKeyToken 那里,现在是等于 9b171c9fd64da1d1 吧?(评估版都这个 Token)对了,就是把这里的 Token 改成你自己的(在 Assembly 文件夹里,请用鼠标右键点任一个你刚编译的 DLL,查看属性,复制 Token,粘贴覆盖掉原文件里评估版的那一串值即可。);然后,保存文件,重新打包成zip文件 即可(连同原有的两个 CS 文件);

18. 关于重编项目再更新:把更新的 DLL 复制到 C:\Program Files\Developer Express .NET 2008 v8.2\Sources\DevExpress.DLL,拖一份到 Assembly,只要 SNK 没变,意味着你生成的 DLL Token 没变,你也不必先在 Assembly 里执行删除,拖动后会自动覆盖的,你也不用再执行 ToolboxCreator,当然,你要是 SNK 都变了,把这两步补上才能圆满;

19. 此版本有一处问题,地方忘了,报“不是所有路径都有返回值”,其实加一个 else 语句就行了。(如果用VS2005这应该只是个警告,但在2008中却升级成了错误。唉)

posted @ 2009-09-21 16:58  CodeYu  阅读(1412)  评论(0编辑  收藏  举报