编译 SharpNav 遇到的问题和解决过程

https://github.com/Robmaister/SharpNav 是github上基于recastnavtigation的一个C#项目.

github上并没有详细的编译过程.

首先把项目clone下来.解压到某目录eg: E:MyCodeSharpNav-master

用VS 2015打开(其他低版本打开会有报错,Github ReadMe提到该项目是在VS2015下编写的) E:MyCodeSharpNav-masterSourceSharpNav.sln 工程文件.

最初直接勾选了Tools/Options对话框内两个选项,如下图,然后Build.

Build一切顺利,如果这样简单就可以了也就没有本文了...

打开生成的E:MyCodeSharpNav-masterBinariesExamplesDebugExamples.exe 发现直接停止运行了......

于是尝试在VS里Debug方式运行,定位到崩溃的位置

在Debug之后,代码定位到E:MyCodeSharpNav-master1SourceSharpNav.ExamplesExampleWindow.cs文件里OnUpdateFrame函数下面这行代码报错: 

 KeyboardState k = OpenTK.Input.Keyboard.GetState();

An unhandled exception of type 'System.TypeInitializationException' occurred in OpenTK.dll

OpenTK.Input.Keyboard”的类型初始值设定项引发异常。


查了很多资料,大概是某OpenTK.dll中变量没有初始化成功,于是尝试下载最新的OpenTK源码,然后用源码替代OpenTK.dll进行编译,这样能定位到具体出错的位置以及可以修改出错的代码.

但是尝试了很久把新版的OpenTK直接Refrence进工程又出现了其他各种错误(怀疑新加入的OpenTK和原工程引用的OpenTK.dll有版本不同,而且原来的引用没有清楚干净,对各种工程设置弄的毫无头绪)

于是希望找到原来SharpNav引用的是哪个版本的OpenTK,然后去找相同版本的OpenTK源码,以排除版本冲突的问题.

后来发现在SharpNav项目右键有一个Manager NuGet Packages,点开之后,搜索OpenTK,在右侧可以看到,当前项目Installed的版本是1.1.2225,但是发现下面可以直接升级到1.1.2349版本,于是怀着试试看的心态,直接在这里Update了OpenTK的版本

Update后弹窗需要更新一些配置文件,当然选确定了(后面怀疑正式这些配置文件在手动更新的时候没有修改,导致版本冲突,引发了其他问题) 

在更新之后,直接Build SharpNav.Example 一切顺利,执行E:MyCodeSharpNav-masterBinariesExamplesDebugExamples.exe,这次终于成功了~~~

ps在SharpNav项目下有一个packages.config配置文件,里面有OpenTK的版本,这也是在Update后,点确定时VS自动修改的文件.

<package id="OpenTK" version="1.1.2225.0" targetFramework="net451" />

最终运行效果:  :)

原文地址:https://www.cnblogs.com/wmalloc/p/5630875.html