1

私は、F# で xna を使用して、サンプル ゲームの適切な実装をまとめることができました。ただし、派生したゲーム クラスをインスタンス化しようとすると、コードは Microsoft.Xna.Framework アセンブリにアクセスしようとして FileNotFound 例外をスローします。なぜこれが起こるのですか?

コード:

#light
open System
open Microsoft.Xna.Framework
open Microsoft.Xna.Framework.Audio
open Microsoft.Xna.Framework.Content
open Microsoft.Xna.Framework.Design
open Microsoft.Xna.Framework.GamerServices
open Microsoft.Xna.Framework.Graphics
open Microsoft.Xna.Framework.Input

type SampleGame() as self =
    class
    inherit Game()
    let mutable manager : GraphicsDeviceManager = null
    let mutable spriteBatch : SpriteBatch = null
    do
        manager <- new GraphicsDeviceManager(self)
    override Game.Initialize() = 
        base.Initialize()
    override Game.LoadContent() = 
        spriteBatch <- new SpriteBatch(manager.GraphicsDevice)
        base.LoadContent()
    override Game.Update(gameTime) = 
        base.Update(gameTime)
        if GamePad.GetState(PlayerIndex.One).Buttons.Back = ButtonState.Pressed then
            self.Exit()
    override Game.Draw(gameTime) = 
        manager.GraphicsDevice.Clear(Color.CornflowerBlue);
        base.Draw(gameTime)
    end

let game = new SampleGame()
game.Run()

ところで、適切な参照を追加しました。編集: いくつかの調査の後、F# プロジェクトが 64 ビットにコンパイルされていることがわかりました。これは、32 ビットの XNA dll では機能しません。ただし、VS 2010 ではソリューション プラットフォームを変更できません。これを修正するにはどうすればよいですか?

4

1 に答える 1

2

XNA についてはよくわかりませんが、「GAC 内」にあるのでしょうか、それとも .exe の横に XNA dll をコピーする必要がありますか? おそらく、.exe の横に Microsoft.Xna.Framework.dll を配置すると解決するようです。

編集

32/64 ビットの情報に基づいて、おそらく .fsproj ファイルの「<プラットフォーム>」を手動で変更します。(プロジェクトを右クリックして「プロジェクトをアンロード」し、もう一度右クリックして「Whatever.fsproj を編集」し、プラットフォームの値として (「x64」または「AnyCPU」ではなく) 「x86」を含むように XML を突っ込み、保存して、プロジェクトを右クリックして「リロード」します。) (Beta1 のさまざまな F# バグが共謀して、プラットフォーム/ソリューション構成のエクスペリエンスを最適とは言えません。)

于 2009-06-12T05:12:55.520 に答える