【问题标题】:Can't load the class defined just above in the code无法加载代码中刚刚定义的类
【发布时间】:2013-11-16 21:14:28
【问题描述】:

我刚开始接触 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'.

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

出了什么问题以及如何解决?

我完全是 .NET 方面的初学者,但我认为,由于我了解 Haskell 并且喜欢函数式编程,因此我很快就会开始使用 MonoGame 和 F# 开发游戏。我使用的是 Ubuntu 13.10。

【问题讨论】:

  • Microsoft.Xna.Framework 是用于 XNA 框架的 Microsoft 程序集——我认为您不能将它们与那里的引用一起使用。我希望本教程针对 Windows 平台。
  • 微软XNA被废弃,不再开发游戏框架。 MonoGame 是一个积极开发的克隆,目前有许多针对 Linux、Mac 和其他非 Microsoft 平台发布的游戏。 Microsoft.Xna 命名空间是其 Mycrosofty 遗产的不幸遗产。
  • 我明白了,我在这里展示了我对 XNA/MonoGame 的无知。
  • 可能是程序集加载器找不到某些引用的程序集 - 它们是安装在 GAC 中还是使用编译后的二进制文件复制到输出文件夹?
  • 我认为这很可能是 Mono 或 MonoGame 问题。我在我的测试机器(Win 8 Pro x64 .Net 4.5 和 MonoGame 3.0.1)上测试了你的代码和我的原始代码,它工作正常。不幸的是,我不使用单声道,但快速的谷歌搜索表明这可能是由于缺少先决条件造成的。你能确认你已经安装了 OpenAL 等吗?

标签: .net f# mono monodevelop monogame


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2018-11-29
    • 2021-02-03
    • 2020-02-19
    相关资源
    最近更新 更多