无法在代码中加载上面定义的类

时间:2013-11-16 21:14:29

标签: .net f# mono monodevelop monogame

我刚开始使用Mono和.NET的东西,在阅读了一些关于F#的内容后,我决定尝试在F#和MonoGame上使用这个简单的游戏教程:

http://bruinbrown.wordpress.com/2013/10/06/making-a-platformer-in-f-with-monogame/

在整理出我从博客上复制粘贴的代码的许多语法错误后,我得到了这段代码:

module desnovro

open Microsoft.Xna.Framework
open Microsoft.Xna.Framework.Graphics

type Game1 () as x =
    inherit Game()

    do x.Content.RootDirectory <- "Content"
    let graphics = new GraphicsDeviceManager(x)
    let mutable spriteBatch = Unchecked.defaultof<SpriteBatch>

    override x.Initialize() =
        do spriteBatch <- new SpriteBatch(x.GraphicsDevice)
        do base.Initialize()
        ()

    override x.LoadContent() =
        ()

    override x.Update (gameTime) =
        ()

    override x.Draw (gameTime) =
        do x.GraphicsDevice.Clear Color.CornflowerBlue
        ()

[<EntryPoint>]
let main argv =
    use g = new Game1()
    g.Run()
    printfn "Desnovro!!!"
    0

在MonoDevelop解决方案中,我创建了一个F#项目,引用了:

  • FSharp.Core
  • 系统
  • System.Core程序
  • Tao.Sdl
  • MonoGame.Framework.Linux
  • OpenTK

我添加了名为Program.fs的上述文件。我能够成功编译项目,但是当我尝试运行它时,我得到以下异常:

Unhandled Exception: System.TypeLoadException: Could not load type 'Game1' from assembly 'game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'Game1' from assembly 'game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.

我的第一次尝试是将类定义和主函数放在分离的文件中(如教程中所示),但得到了相同的结果。如果我在主函数中注释掉Game1g的引用,程序将执行并打印我的消息“Desnovro !!!”成功。

有什么问题以及如何解决?

我是这个.NET的完全初学者,但我认为,因为我知道Haskell并且喜欢函数式编程,所以我很快就能用MonoGame和F#开发游戏。我正在使用Ubuntu 13.10。

1 个答案:

答案 0 :(得分:0)

尝试在命名空间而不是模块中定义Game类型。遗憾的是,WPF和C#反射都很难在模块内定位类型。