- 积分
- 391
- 在线时间
- 154 小时
- 主题
- 1
- 注册时间
- 2017-2-20
- 帖子
- 31
- 最后登录
- 2024-10-13
- 帖子
- 31
- 软币
- 1675
- 在线时间
- 154 小时
- 注册时间
- 2017-2-20
|
编译使用的DevExpress版本是18.1.4,用SourceBuilderTool1.0.5编译一堆错误,只能自己动手编译了,下面记录下编译过程。
DevExpress的源码中有个目录BuildUWP,里面的说明文件明确说了,这只是个例子,并不是完整的编译脚本。
这其实是个大坑,无数人会掉进去。而且这里的编译脚本只编译了UWP,不包括其它控件。这其实看文件夹的名称就能看出来,但是第一次编译的人会把这个文件夹当作是DevExpress官方提供的编译脚本,认为一定是包括所有控件的,所以这就会出很大的问题。
从上一个问题就延伸出下一个问题了,这个脚本写的并不严谨,里面直接就写死了,就是找c盘下的vs2017的专业版和企业版,会让人以为编译源码无法使用vs2017社区版,实际上又是一个小坑,使用vs2017的哪个版本都行。
编译UWP应用的时候,有些项目会报错,主要就是以Design结尾的项目,会提示找不见Windows.winmd,这个问题就是DevExpress开发团队使用的windows应该是win8,里面才有这个项目,到了win10,已经拆分的更具体了。这就需要用vs打开项目文件,修改引用,再修改引用之前,需要先用文本编辑工具打开项目文件,增加一行。具体如何做可以参考这篇文章:https://software.intel.com/en-us/articles/using-winrt-apis-from-desktop-applications.修改完毕之后就可以进行编译了,编译成功会生成对应的dll。到这一步vs还是无法引用相关的控件。
下面说一下另一种比较方便的编译源代码的方法。
首先在源代码的同级目录下创建一个vs项目,然后将同一种类的项目代码添加进去,比如所有WinForms控件都可以加入到一个解决方案中,这样管理起来就比较方便了。
这里要注意的一个是强签名的问题,一个是项目之间的引用关系,可以先添加最基本的项目,编译成功后,继续添加项目,直到添加同一类型的项目完毕。
BuildUWP下面有个生成签名文件的脚本,生成后会在源代码文件夹DevExpress.Key文件夹下面生成StrongKey.snk,这是私钥文件,公钥文件生成在临时目录里了,这里我们用命令自己生成一下公钥文件。
生成公钥
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sn.exe" -p DevExpress.Key\StrongKey.snk DevExpress.Key\StrongKey.publickey
查看公钥
D:/YoudaoNote/x2487mp@163.com/4985be6b3e69498ba0916add70813ac2/f4075565ddd04a248f2f3945731e0522.jpg
这些内容是要替换AssemblyInfo中相关值的:
D:/YoudaoNote/x2487mp@163.com/ae267748a493402abc7c45754214bf49/b2153616a8624fca9523f718975dfe24.jpg
PublicKey就要替换,可以手动替换,也可以使用BuildUWP中的工具PatchInternalVisibleTo.exe
替换代码中的公钥
BuildUWP\PatchInternalVisibleTo.exe DevExpress.Data\AssemblyInfo.cs "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sn.exe" DevExpress.Key\StrongKey.snk
创建好解决方案后,第一个要添加的项目是,DevExpress.Data,里面有两个项目文件,都要添加,这个项目中有两个文件要修改对应的publickey,AssemblyInfo.cs和AssemblyVersion,后者里面的PublicKeyToken也修改成自己的公钥标记。
D:/YoudaoNote/x2487mp@163.com/7e07330291e34e3ea428cc7391f0f17f/b2153616a8624fca9523f718975dfe24.jpg
下面就可以开始一边编译一边添加项目了。
WinForms总共涉及到多少个项目呢,也不多,94个,第一次编译会有多少报错呢,也不是很多,也就5万多吧,哈哈
解决编译错误:
第一步,统一类库,所有项目选择相同的类库,这样错误能到4万左右。
第二步,修改所有项目中的AssemblyInfo.cs文件,更换publickey和publicktoken。在整个项目范围内搜索替换这两个值。(这涉及到友元的问题)。
第三步,DevExpress.Diagram.Core所引用的项目都编译成功,但是这个项目编译不成功,主要是因为DiagramLocalizerGenerator.tt中引用了LocalizerGenerator.tt,但是当前目录下没有这个文件,搜索整个项目,在DevExpress.Dialogs.Core中发现对应的文件,复制到DiagramLocalizerGenerator.tt目录下,修改下这个文件然后恢复,保存后自动生成类,项目编译成功。
第四步,其它类都正常了,就是DevExpress.Design还是无法编译通过,主要是引用系统框架里的一些dll显示异常,这主要是因为这些dll只在4.5及以上框架存在,4.0中没有。修改完毕后,所有控件使用的框架是.net 4.0的,所有设计时用到的控件都是.net 4.5的,这个要注意下。修改时,首先将项目框架改为4.5,然后删除显示不正常的引用,重新引用下就行了。
注意: DevExpress.XtraReports.Design (删除引用的水晶报表组件,可以编译成功)
第五步,项目整体编译一下,把编译出错的漏网之鱼再修改下,就ok了。
第六步,把编译好的dll加入到GAC中。
bin目录下是控件,bin/Design目录下是设计器。
将bin下的dll文件名生成到list.txt文件中,运行命令 dir *.dll /B > list.txt, 然后到design目录下运行同样的命令,之后以管理员权限运行cmd,分别cd到bin目录下和design目录下,运行一下命令:"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\gacutil.exe" /il list.txt
第七步,在工具箱中添加控件,控件较多,可以按分类排放。
第八步,汉化,重新编译汉化包中的文件,要修改publickey和publickeytoken,编译后将zh_Hans放到应用程序目录下就可以了。
ok,到此通过源码编译DevExpress的工作全部完成,整了一天的时间,挺麻烦的。感觉DevExpress虽然提供了源代码,但是无法直接编译运行,中间留了无数的小坑,就是不想让人轻松的编译通过,虽然都不难,但是很繁琐,估计是为了再卖一次服务吧。
第九步,将控件添加到工具箱,如果手动操作是非常麻烦的,而且要自己分类,很烦。这里直接用DevExpress自己的工具ToolboxCreator.exe来做这个。在DevExpress安装目录下找到,复制出来,一共三个文件:ToolboxCreator.exe、components.xml、toolboxcreator.ini。然后卸载DevExpress试用版。使用管理员权限启动命令行,转到ToolboxCreater.exe所在目录,运行以下指令:
ToolboxCreator.exe /150 /COMPONENTSXML:components.xml /INI:toolboxcreator.ini /PATH:"D:\OpenSourceProject\DevExpress_Sources_v18.1.4\Bin\Framework\mydll"
其中/150是vs的主版本号,对应vs2017,/PATH中的路径是自己编译生成的dll的目录,为了安全起见,可以将自己生成的DevExpress的dll复制到一个专门的目录下,使用命令 cp *.dll mydll 。然后打开vs,可以看到工具箱中已经有了对应的DevExpress分类。
弄完后打开VS2017,看工具箱,很完美。
|
评分
-
查看全部评分
|