GMAP 开源代码如何编译

4 篇文章 0 订阅

GMAP 开源代码如何编译

在公司研究了好久的GMAP,一直想分享一下心得,筹划了好久,今天终于开始写了。有不对的地方还请海涵。

由于小编是使用winform进行GMAP开发的,所以这里只赘述winform如何进行GMAP开源代码的编译。

首先需要下载GMAP的官方源码,下载地址可以从GMap官网下载,也可以去网上找,小编这里提供一个链接:
http://download.csdn.net/download/liuw0707/5698415

下载完成,打开工程可以看到在VS下解决方案资源管理器的构成如下图所示:
GMap 开源代码解决方案资源管理器构成

GMap源码部分,就是我用红色方框标注出来的部分。我们需要在源码目录下找到这三个工程,打开源码目录,可以看到如下图所示:
工程目录文件列表
至此,便得到了GMap代码部分。

然后新建winform工程,小编这里将工程名命名为GMapCompile。将GMap三个工程的源码(共三个文件夹)拷贝到GMapCompile目录下,
GMapCompile编译目录

右键解决方案->添加->现有项目
添加GMap源码到工程中去

依次将拷贝到GMapCompile目录下的GMap三个工程的源码添加到解决方案中,
这里写图片描述

到这里针对GMap的自定义编译工程已经搭建完毕,此时右键GMap.Net.Core工程点击重新生成,会报一个错误:
重新生成有错

* 命名空间“System.Data”中不存在类型或命名空间名称“SQLite”(是否缺少程序集引用?) *

查看GMap.Net.Core工程的引用文件可以看到:
引用目标查看

所以这是由于在工程中缺少必要的引用造成的。我们首先找到这些包含引用的dll,
http://download.csdn.net/detail/yuanquanzheng/9590486

欠缺的dll
一次在工程引用下面将现有带黄色感叹号的引用移除,然后将以上dll添加到工程引用中去或者直接将所有dll拷贝到GMap.Net.Core的Debug目录下即可,此时再重新生成GMap.Net.Core 即显示生成成功。

接下来重新生成GMap.NET.WindowsForms和GMap.NET.WindowsPresentation也可以顺利生成。进行到此时,GMap的源码我们便可以进行编译了,但是很重要的问题是,我们编译出来的GMap控件可不可以使用呢?

我们在工具箱中拖拽GMapControl到GMapCompile的form面板上去,
拖拽GMapControl

熟练使用winform的童鞋会知道,当将控件拖拽到form面板上去之后,工程代码生成器,会自动进行控件的初始化(包括分配内存,参数设置等),所以此时若启动GMapCompile的调试实例,如果能正常运行,即重新生成的GMapControl可以正常使用。
但是,当我们启动Debug调试时,会出现以下错误:
出现错误

异常显示是,不能初始化我们生成的GMapControl控件,但是究竟是什么原因造成不能进行初始化呢?

这里有两个原因:一是我们编译GMap源码时使用的windows环境和我们使用的GMapCompile工程编译环境不一致引起的。我们右键GMap.NET.Core —>属性,选择应用程序,可以看到默认的GMap编译框架为.NET Framework 2.0
GMap默认编译框架

而我们的GMapCompile工程的编译框架为.NET Framework 4.5
GMapCompile编译框架

winform 在调试运行时会进行版本检查,当一个项目中出现不同版本的文件代码时,会报出错误。我们需要在工程GMapCompile的App.config中的 中添加useLegacyV2RuntimeActivationPolicy=”true” 使winform在运行时,不进行版本检查,自然也就不会因为这个原因报错了。
APP.config

第二个原因是我们项目的目标平台不统一导致的,右键项目选择属性,点击生成页,进行目标平台的调整,我这里目标平台使用的是x86(不能选择成Any CPU,对于x64不知道可不可以,有时间的童鞋可以试一试)
目标平台

改到这两个地方之后先依次重新生成GMap源代码,然后启动GMapCompile调试实例,便可以正常运行了,我们就可以对GMap源代码进行修改,并按照我们的实际要求编译生成了。

这里笔者多说一句:
由于编译时,各个工程的版本不一致,将会导致我们的代码在运行时对window下环境的要求越发的苛刻,所以笔者的习惯是能尽量减少版本的不一致性就尽量减少版本的不一致性,这里附上将GMap源码更改为.NET Framework 4.5 的一些处理方法。

我们统一将解决方案中的工程项目改为在.NET Framework 4.5 下运行。将GMap源码的三个工程依次重新生成。此时会发现GMap.NET.Core和GMap.NET.WindowsForms成功生成,但是工程GMap.NET.WindowsPresentation却生成失败,报出错误:
GMap生成失败

类型“System.Windows.Markup.IQueryAmbient”在未被引用的程序集中定义。必须添加对程序集“System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。

未能在命名空间“System.Windows.Markup”中找到类型名称“IComponentConnector”。此类型已转发到程序集“System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”。请考虑添加对该程序集的引用。

造成该错误的原因是没有添加对System.Xaml.dll的引用,该dll属于.NET框架下自带的dll文件,笔者测试过,一直到.NET Framework 4.0 仍然在.NET 4.0 目录下依然存在该dll文件,但是到.NET 4.5 就不支持该文件了,所以要在.NET Framework 4.5 下使用此dll需要手动添加引用指向.NET 4.0 目录下的System.Xaml.dll(前提是你的电脑需要安装.NET Framework 4.0 ,其引用路径为C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Xaml.dll ,如果不想安装.NET Framework 4.0 找一台装好了该框架的,在对应目录下将dll拷贝过来,然后手动添加引用即可)。

最后附上源代码

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值