开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 19600|回复: 32

DevExpress 14.2.3 WinForm编译终极指南,独家提供完整sln文件

[复制链接]

0

精华

0

贡献

32

赞扬

帖子
45
软币
1038
在线时间
119 小时
注册时间
2015-5-5
发表于 2015-6-9 21:14:32 | 显示全部楼层 |阅读模式
本帖最后由 sailings 于 2016-4-13 22:05 编辑

DevExpress源码编译总结
独家提供完整可编译sln文件,本篇文章内容包括基础知识(GAC、程序集强签名、友元程序集)、编译过程、注册GAC、添加工具箱、多语言支持、运行时和设计时调试

源码地址  链接:http://pan.baidu.com/s/1miNCHug 密码:rlyr

关于编译源码,前前后后折腾了太久,自己折腾,到官网折腾,到DXPER折腾,今天,总算有个结局了

编译环境
工具:Visual Studio 2010
源码:DXperience source code14.2.3.14339(源码已经整理好,不需要任何改动,解决方案文件放在sln\WinForm\WinForm.sln)
源码结构
1.png
为了更好地验证最后的编译成果,如果已经安装了DevExpress官方版,请先卸载,编译DevExpress的源码并不依赖于DevExpress官方版的安装。
编译目标
1.     将DevExpress中WinForm相关组件全部编译
2.     编译完成后能手工添加到工具箱
3.     从工具箱中拖放控件到Form中,设计视图能正常工作,运行时也正常。
4.     提供多语言支持
5.     能调试运行时和设计时
编译基础
在动手编译之前,先复习一下基础知识
GAC
1.      什么是GAC
GlobalAssembly Cache,全局程序集缓存
2.      为什么要注册GAC
注册到GAC中的程序集能被整个系统共享
3.      如何注册及取消注册
使用.net framework自带的工具gacutil
gacutil/i [abc.dll],将当前目录下的abc.dll文件注册到GAC
如果要注册的文件比较多,可以使用列表文件,后面在DevExpress源码编译完成后,生成的文件比较多,可以使用批量注册,命令为gacutil /il list.txt,其中list.txt的格式如下:
DevExpress.BonusSkins.v13.2.dll
DevExpress.Charts.v13.2.Core.dll
DevExpress.CodeConverter.v13.2.dll
……
每行一个文件名
取消注册与注册类似,可以参考.net framekwork工具帮助
程序集强签名
1.      什么是程序集强签名
在生成程序集时,指定一个私钥文件(该私钥文件为私有,不会对外公开),经过这样的方式编译后的程序集称为强签名程序集。
2.      为什么要使用签名
l  保证生成的程序集唯一性,强签名的程序集都有一个公钥,只有用特定私钥生成的程序集才会有该公钥。
l  防止程序集被非法篡改,一旦强签名后,程序集内部会保存公钥,加载该程序集时,CLR会验证该公钥,如果被非法篡改,则公钥验证失败,会抛出异常。
l  未签名的程序集无法注册GAC
3.      如何使用签名
l  生成私钥(PS:这个私钥只是演示用,源码中使用的并不是这个私钥)
使用.net framework工具sn,sn -k MyKey.snk,生成的私钥文件存放在当前目录下的MyKey.snk
2.png
3.png
l  查看公钥
首先将公钥写入文件
4.png
5.png
然后再查看公钥
6.png
4.      在VS中指定签名
在VS中指定签名至少能通过两种方式
一、 在AssemblyInfo.cs文件中指明签名文件路径
27.png
二、 在工程属性栏中的“签名”标签
7.png
以上两种方式任选其一,第二种方式在VS2005之后才支持,现在DevExpress推荐采用第二种,我们的源码中签名全部采用这种方式。
5.      DevExpress的签名
DevExpress公司在发布产品时,使用了私钥对产品进行了强签名,目前只知道其公钥标记为b88d1754d700e49a,如果你的程序加载的程序集公钥为b88d1754d700e49a,则证明使用的是DevExpress公司提供的,而不是其它人提供的
6.      源码中的签名
在编译源码前,需要生成我们自己的私钥,生成的私钥放在DevExpress.Key文件中,解决方案中所有的工程都使用该签名,这里可以看一下我们的公钥
8.png
这也就意味着,我们编译出来的程序集公钥标记为94a041a7af35fb7f,其它任何人都无法仿制与篡改。(PS:这个公钥可以到src\DevExpress.Key\key.txt文件中找到)
友元程序集
1.      什么是友元程序集
默认情况下,程序集里使用internal修饰符,则该类型或成员只能在该程序集内部访问,如果需要让外部也能访问到,这就需要友元程序集。[MSDN]友元程序集是一种能够访问其它程序集的internal类型和成员的程序集,如果将程序集指定为友元程序集,则不再需要将类型和成员标记为公共,以使其他程序集可以访问它们
2.      为什么需要友元程序集
l  单元测试,测试代码在另一个程序集运行,但需要访问正在测试的程序集internal成员
l  类库分开在多个程序集中,程序集需要互相访问内部internal成员
3.      DevExpress中的友元程序集
DevExpress中很多的基础功能放在DevExpress.Data中,该程序集有很多友元程序集,打开DevExpress.Data下的AssemblyInfo.cs,可以清楚地看到它的友元程序集
9.png
即,在以上这些模块中,可以直接访问DevExpress.Data中的internal类型。
其它模块的友元程序集与DevExpress.Data类似。
编译过程
1.    代码获取
代码已经全部打包成压缩文件
2.    修改签名
私钥已经生成好,工程已经使用该私钥签名,不需要修改。如果想使用自己的签名,需要按照以下步骤:
一、           使用.net framework自带工具生成一份强签名文件,名称为StrongKey.snk,覆盖src\DevExpress.Key下的同名文件
二、           打开sln\WinForm\WinForm.sln,在整个解决方案中,替换所有引用公钥标记和公钥的地方
10.png
11.png

3.    编译
打开sln\WinForm\WinForm.sln,然后重新生成解决方案
后续工作
注册GAC
生成后的部分文件如下:
12.png
另外Design文件夹中包含了需要设计时支持的程序集,将生成的这些DLL文件注册进GAC中(如何使用列表批量注册,可参考前文),Design中的DLL也要注册。
工具箱添加
打开VS,新建一个WinForm项目,打开工具箱,空白处右键,选择“添加选项卡”
13.png
然后自己输入一个名称,这里取名为“DevExpressBuild”,然后右键,选择“选择项”
14.png
在弹出的对话框中选择“浏览“,然后选择GAC中某个DevExpress DLL,这里以ChartControl为例,选择C:\Windows\Microsoft.NET\assembly\GAC_MSIL\DevExpress.XtraCharts.v14.2.UI下的文件夹下的DLL。确定后,能看到工具箱添加成功,如下:
15.png
其它控件工具箱的添加过程类似。(PS:此处有人有疑问,你怎么知道ChartControl放在DevExpress.XtraCharts.v13.2.UI这个DLL文件中,关于具体的控件放在哪个DLL中,DevExpress自带的文档都有详细的说明,请参考)
成果检验
至此,DevExpress的编译已经完成,下面来检验编译后的成果。
还是上面的工程,直接拖放工具箱中的ChartControl到窗体中,终于看到自己编译的成果了
16.png
随便选择一种类型,点击“Finish”,注意看VS中的引用列表
17.png
已经自动为我们引用了所需的DLL,在部署时,只需要将这些DLL打包部署到客户机器上即可。
已经很接近完美了,下面看看多语言支持
多语言支持
如果使用的是安装版的DevExpress,可以到官方网站下载所需的资源文件,但是我们是自行编译的,无法直接使用官方提供的强签名的资源文件。这就需要我们自行编译语言的资源文件了,这个编译也很简单,因为解决方案全部设置好了(如果源码编译时使用了自己的签名,需要将src\DevExpress.Key\StrongKey.snk拷贝到dxKB_A421_DXperience_v14.2_(2014-12-16)\DevExpress.Key\下覆盖同名文件),只需要打开dxKB_A421_DXperience_v14.2_(2014-12-16)\Localization.sln,重新生成,生成的产物路径为dxKB_A421_DXperience_v14.2_(2014-12-16)\DevExpress.Dll,假如我们需要控件支持汉语,则进入DevExpress.DLL\zh-CN,将文件夹里面所有的DLL注册进GAC
关闭并重新打开刚才新建的工程,在刚才创建的ChartControl基础上,创建一个Ribbon,可以看到,界面已经汉化了。
18.png
虽然官方提供的资源汉化率不是100%,但在运行时已经基本能满足要求了。
源码调试
运行时调试
既然通过源码编译的,那么调试应该不是什么大问题了
例如上面的工程中,我想在运行时,向图表中添加一个点,我想看看这个点的添加过程
19.png
AddPoint事件处理代码只有一句
20.png
在DevExpress.XtraCharts.UI工程中的ChartControl.cs文件中Series
属性添加断点,如下
21.png
然后调试工程,点击“AddPoint”按钮,命中了断点
22.png
其它的调试都是类似过程。
设计时调试
DevExpress控件对VS设计时支持得很好,在设计阶段,可以非常直观地设置控件属性。如果想了解DevExpress在设计时做了哪些事情,可以对设计时进行调试。设计时调试与运行时调试不太一样,设计时调试实际上是使用一个VS调试另一个VS,这里我们举一个例子,我想看看上面这个ChartControl控件在设计时,点击“关于”时做了哪些事情
23.png
一、           首先在工程属性中,选中“调试”标签页,启动操作选择“启动外部程序”,后面的路径选择VS2010所在的路径,默认为C:\Program Files(x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe,也即我想调试另外一个VS
二、           添加断点
这一步断点的位置根据自己的需求,本次我们的断点设置在DevExpress.XtraCharts.Design工程中的Designers.cs文件中的ChartControlDesigner类中的OnAbout方法,如下(PS:此处有人有疑问,你怎么知道点击“关于”后进入这个函数的,实际上,调试代码前,需要大概了解代码)
24.png

三、           开始调试
F5启动调试,这时会打开另一个VS,在这个新的VS中打开刚才的工程,点击窗体上ChartControl控件右侧小箭头,在弹出的界面中选择“关于”,VS果断命中断点,如下
25.png
实际上官方提供的14.2.3安装版里的ChartControl控件点击“关于”是没有任何反应的,这段代码是我自己加上的,也是起作用的,弹出的对话框如下
26.png
这就是传说中设计时调试,注意,此时应用程序并没有运行起来,这种调试方式对于开发自定义控件非常有用
Q&A
Q:工具箱中拖放控件到Form中,没有反应或者提示各种错误
A:这种情况一般都是因为没有注册生成目录中Design文件夹下的以”.Design.dll”为结尾的文件,要想在VS中对控件进行设计,这些DLL必须注册到GAC
Q:以.Design.dll为结尾的文件,在部署时,需要拷贝到客户机器上吗?
A:不需要,这些DLL在运行时不需要
Q:从工具箱中拖放一个控件到Form中,如何让VS自动引用所需的DLL
A:将依赖的DLL注册到GAC
Q:使用源码编译后的程序集还需要破解吗?
A:不需要,在工程引用中,引用的DLL文件属性中,“复制本地”设置为true,然后将输出目录中的文件进行打包,拷贝到其它机器即可

评分

参与人数 8赞扬 +8 收起 理由
1346434442 + 1
samson2013 + 1 不明觉厉
exiuge + 1 很给力
ywscr + 1 Thanks
yoyo99999 + 1 很给力

查看全部评分

回复

使用道具 举报

0

精华

160

贡献

2015

赞扬

帖子
698
软币
8884
在线时间
1079 小时
注册时间
2013-8-1
发表于 2015-6-9 21:48:09 | 显示全部楼层
虽然是老生常谈了,但还是谢谢楼主,给哪些需要的人的帮助。
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
4
软币
89
在线时间
2 小时
注册时间
2015-6-12
发表于 2015-6-12 03:16:12 | 显示全部楼层
softboy99 发表于 2015-6-9 21:48
虽然是老生常谈了,但还是谢谢楼主,给哪些需要的人的帮助。

这两天也在搞这个东东,350个项目,有一部份(WinRT)没有编译过,涉及到这两个文件,如果有源码的话请分享一下: DevExpress.Build.v14.2.dll  和 DXsdk.exe



回复

使用道具 举报

0

精华

386

贡献

3971

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
323
软币
18097
在线时间
4639 小时
注册时间
2013-8-28
发表于 2015-6-12 09:18:15 | 显示全部楼层
写的真仔细,知识点也多呀。。。好。。。
回复

使用道具 举报

0

精华

575

贡献

1058

赞扬

帖子
133
软币
5154
在线时间
809 小时
注册时间
2015-5-4
发表于 2015-6-17 13:42:00 | 显示全部楼层
写的非常好,请问一下WPF的搞得怎样?
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
5
软币
60
在线时间
0 小时
注册时间
2015-7-12
发表于 2015-7-12 09:39:23 | 显示全部楼层
很给力的,新手来了,谢谢!
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
10
软币
116
在线时间
8 小时
注册时间
2015-7-19
发表于 2015-7-19 21:39:47 | 显示全部楼层
我是新手,我感谢。整了一个下午一个晚上了,希望你的能用。
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
10
软币
116
在线时间
8 小时
注册时间
2015-7-19
发表于 2015-7-20 02:51:08 | 显示全部楼层
楼主问个问题,在design文件夹下,还有一些没有design后缀的dll文件,也要GAC注册吗?跟前面的重复了呀。
回复

使用道具 举报

0

精华

0

贡献

32

赞扬

帖子
45
软币
1038
在线时间
119 小时
注册时间
2015-5-5
 楼主| 发表于 2015-7-20 20:25:57 | 显示全部楼层
coolca 发表于 2015-7-20 02:51
楼主问个问题,在design文件夹下,还有一些没有design后缀的dll文件,也要GAC注册吗?跟前面的重复了呀。 ...

不需要的,跟上层文件夹里的DLL是一样的,是生成的时候拷贝过来的
回复

使用道具 举报

0

精华

0

贡献

32

赞扬

帖子
45
软币
1038
在线时间
119 小时
注册时间
2015-5-5
 楼主| 发表于 2015-7-20 20:26:38 | 显示全部楼层
coolca 发表于 2015-7-19 21:39
我是新手,我感谢。整了一个下午一个晚上了,希望你的能用。

应该可以的,每个环节我都自己试过了
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
10
软币
116
在线时间
8 小时
注册时间
2015-7-19
发表于 2015-7-21 16:43:16 | 显示全部楼层
楼主,编译,GAC 控件都成功了,可以正常使用。谢谢。
但是汉化编译时出错,提示:
错误        1        资源文件“obj\Debug\DevExpress.ExpressApp.Win.Resources.XafLayoutCustomizationFormLocalizationResources.zh-TW.resources”有无效的名称。无法将项元数据“%(FullPath)”应用于路径“obj\Debug\DevExpress.ExpressApp.Win.Resources.XafLayoutCustomizationFormLocalizationResources.zh-TW.resources”。D:\Backup\DevExpress_14.2.3\DXperience source code 14.2.3.14339\dxKB_A421_DXperience_v14.2_(2014-12-16)\DevExpress.ExpressApp\DevExpress.ExpressApp.Win\obj\Debug\DevExpress.ExpressApp.Win.Resources.XafLayoutCustomizationFormLocalizationResources.zh-TW.resources        DevExpress.ExpressApp.Win
怎么解决啊?
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
17
软币
183
在线时间
15 小时
注册时间
2014-12-13
发表于 2015-8-1 18:31:39 | 显示全部楼层
楼主你好,我编译dxKB_A421_DXperience_v14.2文件下下的代码,除了本地化资源的DLL,也生成了控件的DLL,那些可以用吗,和你整理的winform.sln编译生成的有区别吗?
回复

使用道具 举报

0

精华

0

贡献

32

赞扬

帖子
45
软币
1038
在线时间
119 小时
注册时间
2015-5-5
 楼主| 发表于 2015-8-2 20:19:35 | 显示全部楼层
q527191637 发表于 2015-8-1 18:31
楼主你好,我编译dxKB_A421_DXperience_v14.2文件下下的代码,除了本地化资源的DLL,也生成了控件的DLL,那 ...

生成语言资源文件时的DLL是不能单独使用的,只需要注册语言相关的DLL就行了
回复

使用道具 举报

头像被屏蔽

0

精华

-4

贡献

6

赞扬

禁止发言

帖子
121
软币
578
在线时间
83 小时
注册时间
2015-5-4
发表于 2015-8-3 14:36:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

0

精华

0

贡献

5

赞扬

帖子
10
软币
116
在线时间
9 小时
注册时间
2015-8-3
发表于 2015-8-3 16:24:05 | 显示全部楼层
Microsoft.VisualStudio.Shell.Design 这个dll 怎么才能找到? 编译后报错,都是Design文件夹找不到有关design的DLL
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
1
软币
56
在线时间
0 小时
注册时间
2015-8-3
发表于 2015-8-3 18:36:30 | 显示全部楼层
虽然现在用不上,但是感谢分享.先留下.现在只能用11.2.11
回复

使用道具 举报

0

精华

129

贡献

52

赞扬

帖子
247
软币
1806
在线时间
193 小时
注册时间
2014-5-13
发表于 2015-8-17 11:52:30 | 显示全部楼层
楼主真厉害,人品也超级棒,1万个赞
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
10
软币
157
在线时间
14 小时
注册时间
2015-1-13
发表于 2015-8-17 16:56:34 | 显示全部楼层
赞一个 楼主 真厉害
回复

使用道具 举报

0

精华

3

贡献

47

赞扬

帖子
45
软币
383
在线时间
32 小时
注册时间
2014-10-17
发表于 2015-10-6 20:15:09 | 显示全部楼层
ShowCore(modelItem.Context.Services, modelItem, GetDataAccessContext(component));
报错!求解!
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
16
软币
83
在线时间
3 小时
注册时间
2015-10-13
发表于 2015-10-15 11:23:32 | 显示全部楼层
我想问问你的vs中的菜单是怎么进行汉化的呀,能不能指点一下啊
回复

使用道具 举报

0

精华

0

贡献

98

赞扬

帖子
57
软币
548
在线时间
51 小时
注册时间
2014-10-18
发表于 2016-4-1 15:57:03 | 显示全部楼层
链接失效了,楼主
回复

使用道具 举报

0

精华

0

贡献

98

赞扬

帖子
57
软币
548
在线时间
51 小时
注册时间
2014-10-18
发表于 2016-4-5 15:16:07 | 显示全部楼层
楼主您好,百度网盘已经失效,能不能再次分享。我真的很需要,急需
回复

使用道具 举报

0

精华

0

贡献

32

赞扬

帖子
45
软币
1038
在线时间
119 小时
注册时间
2015-5-5
 楼主| 发表于 2016-4-13 22:06:37 | 显示全部楼层
已经更新网盘地址,谢谢大家捧场,有问题的话直接提问,我尽量回答
回复

使用道具 举报

0

精华

0

贡献

32

赞扬

帖子
45
软币
1038
在线时间
119 小时
注册时间
2015-5-5
 楼主| 发表于 2016-4-13 22:10:15 | 显示全部楼层
GoblinChu 发表于 2015-8-3 16:24
Microsoft.VisualStudio.Shell.Design 这个dll 怎么才能找到? 编译后报错,都是Design文件夹找不到有关des ...

这个dll安装visual studio2010后会有吧,我的机器没有额外安装这个dll
回复

使用道具 举报

0

精华

0

贡献

32

赞扬

帖子
45
软币
1038
在线时间
119 小时
注册时间
2015-5-5
 楼主| 发表于 2016-4-13 22:10:46 | 显示全部楼层
qsccer 发表于 2016-4-5 15:16
楼主您好,百度网盘已经失效,能不能再次分享。我真的很需要,急需 ...

已经更新地址
回复

使用道具 举报

0

精华

79

贡献

36

赞扬

帖子
125
软币
1754
在线时间
107 小时
注册时间
2013-7-1
发表于 2016-5-12 09:01:36 | 显示全部楼层
相当认真,大赞一个
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
3
软币
83
在线时间
0 小时
注册时间
2016-5-11
发表于 2016-5-12 09:25:31 | 显示全部楼层
能不能改名控件呢?比如:DevExpress.Data.14.2.3.dll改名为Data.dll这样用呢
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
12
软币
228
在线时间
25 小时
注册时间
2015-7-29
发表于 2016-7-25 15:20:34 | 显示全部楼层
按照大神的做法,已经可以使用。唯一的问题是:无法打开旧的repx文件。不知道有什么解决方案没有
回复

使用道具 举报

0

精华

0

贡献

17

赞扬

赞助者组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
33
软币
367
在线时间
53 小时
注册时间
2016-6-8
发表于 2016-8-22 17:27:40 | 显示全部楼层
楼主什么时候,再发布一个16版本的呀? 很期待
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
13
软币
148
在线时间
13 小时
注册时间
2018-12-9
发表于 2018-12-10 22:45:50 | 显示全部楼层
这个版本不错,编译的很顺利,也不需要额外的程序,就是看了一下,好像没有XtraDiagram,这样流程图什么的没法画,不知道是不是只有16.1以上的版本才有
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-19 17:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表