Ошибка компиляции игры MonoGame через терминал на MacOS - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь разработать свой собственный редактор MonoGame, который способен компилировать игру.Для этого я пытаюсь скомпилировать игру через терминал, чтобы проверить и убедиться, что это возможно.В Windows это работает без проблем;однако в MacOS я не могу собрать минималистичный пример.Вот что у меня есть:


Команда, которую я запускаю для компиляции.Все необходимые dll / исходные файлы существуют в одном каталоге.Сам процесс компиляции не приводит к каким-либо ошибкам, поэтому я сомневаюсь, что проблема заключается в простом использовании файлов.Тем не менее, я предполагаю, что есть кое-что, что мне нужно исправить здесь:

csc /reference:MonoGame.Framework.dll /reference:OpenTK.dll /out:MyGame /optimize main.cs


Команда выполнения (Здесь происходит ошибка. Она печатается сразу после выполнения этой команды.):

mono MyGame


Ошибка, возникающая во время выполнения:

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at ObjCRuntime.Class.Register (System.Type type) [0x00001] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at ObjCRuntime.Class.GetHandle (System.Type type) [0x00001] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at Foundation.NSObject.AllocIfNeeded () [0x0001e] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at Foundation.NSObject..ctor (Foundation.NSObjectFlag x) [0x00007] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at AppKit.NSResponder..ctor (Foundation.NSObjectFlag t) [0x00000] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at AppKit.NSWindow..ctor (CoreGraphics.CGRect contentRect, AppKit.NSWindowStyle aStyle, AppKit.NSBackingStore bufferingType, System.Boolean deferCreation) [0x00000] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at Microsoft.Xna.Framework.MacGameNSWindow..ctor (CoreGraphics.CGRect rect, AppKit.NSWindowStyle style, AppKit.NSBackingStore backing, System.Boolean defer) [0x00000] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.MacGamePlatform.InitializeMainWindow () [0x0001d] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.MacGamePlatform..ctor (Microsoft.Xna.Framework.Game game) [0x0003c] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.GamePlatform.PlatformCreate (Microsoft.Xna.Framework.Game game) [0x00000] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.Game..ctor () [0x001fb] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at MyGame.TestGame..ctor () [0x00000] in <c3e40b4cec934c9cba34c73e74a28eb5>:0 
  at MyGame.Program.Main () [0x00000] in <c3e40b4cec934c9cba34c73e74a28eb5>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
  at ObjCRuntime.Class.Register (System.Type type) [0x00001] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at ObjCRuntime.Class.GetHandle (System.Type type) [0x00001] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at Foundation.NSObject.AllocIfNeeded () [0x0001e] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at Foundation.NSObject..ctor (Foundation.NSObjectFlag x) [0x00007] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at AppKit.NSResponder..ctor (Foundation.NSObjectFlag t) [0x00000] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at AppKit.NSWindow..ctor (CoreGraphics.CGRect contentRect, AppKit.NSWindowStyle aStyle, AppKit.NSBackingStore bufferingType, System.Boolean deferCreation) [0x00000] in <088ca15f28ed485b8ec04e5baf83b5ec>:0 
  at Microsoft.Xna.Framework.MacGameNSWindow..ctor (CoreGraphics.CGRect rect, AppKit.NSWindowStyle style, AppKit.NSBackingStore backing, System.Boolean defer) [0x00000] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.MacGamePlatform.InitializeMainWindow () [0x0001d] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.MacGamePlatform..ctor (Microsoft.Xna.Framework.Game game) [0x0003c] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.GamePlatform.PlatformCreate (Microsoft.Xna.Framework.Game game) [0x00000] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at Microsoft.Xna.Framework.Game..ctor () [0x001fb] in <22537961847f41f881e1a9d3cb0e99a8>:0 
  at MyGame.TestGame..ctor () [0x00000] in <c3e40b4cec934c9cba34c73e74a28eb5>:0 
  at MyGame.Program.Main () [0x00000] in <c3e40b4cec934c9cba34c73e74a28eb5>:0

Исходный код (main.cs - возможно, ненужный, ноЯ знаю, что кто-то, скорее всего, попросит об этом.):

using System;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace MyGame {
    class Program {
        [STAThread]
        static void Main() {
            using(var game = new TestGame()) {
                game.Run();
            }
        }
    }
}

namespace MyGame {
    public class TestGame : Game {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Texture2D texture;
        Vector2 position;

        public TestGame() {
            graphics = new GraphicsDeviceManager(this);
            position = new Vector2(0, 0);
        }

        protected override void Initialize() {
            texture = new Texture2D(this.GraphicsDevice, 100, 100);
            Color[] colorData = new Color[100 * 100];
            for (int i = 0; i < 10000; i++) {
                colorData[i] = Color.Red;
            }

            texture.SetData<Color>(colorData);
            base.Initialize();
        }

        protected override void LoadContent() {
            spriteBatch = new SpriteBatch(GraphicsDevice);
        }

        protected override void UnloadContent() {
        }

        protected override void Update(GameTime gameTime) {
            if(IsActive) {
                if(GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || 
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) {
                    Exit();
                }

                position.X += 1;
                if(position.X > this.GraphicsDevice.Viewport.Width) {
                    position.X = -100;
                }

                base.Update(gameTime);
            }
        }

        protected override void Draw(GameTime gameTime) {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin();
            spriteBatch.Draw(texture,position,Color.White);
            spriteBatch.End();
            base.Draw(gameTime);
        }
    }
}
...