在VS Code中使用Monogame是否可行?

10
我正在使用iball笔记本电脑,没有足够的内存来安装Visual Studio。 我使用VS Code没有任何问题,能够创建可执行文件和控制台应用程序。 我需要学习游戏开发,但是每个人都说我需要安装Visual Studio。
然而,我在关于Monogame的论坛上发现,在VS Code中(至少在Linux上)可以使用Monogame。

http://community.monogame.net/t/visual-studio-code-and-monogame/2371

请帮我一下。我想知道在Windows上是否真的可以编译和运行monogame应用程序。


我相信这是可能的。等我有时间了,我会尝试一下并回报结果(除非有人比我更快地回答)。你只需要恢复正确的NuGet包,然后连接MGCP工具即可。 - Shawn Rakowski
4个回答

12

回答已编辑,因为Monogame发布了官方的dotnet项目模板

我终于让它工作了。

我意识到我所需要的就是创建一个Monogame项目(*.csproj),然后在没有Visual Studio的情况下编译/构建它。VS Code只是一个功能丰富的文本编辑器,我需要其他的工具集。

MSBuild工具用于编译/构建Monogame项目,并可用作CLI。不需要安装Visual Studio即可使用。

对于C#项目构建,需要使用dotnet core。执行脚本即可。

dotnet new [Template]
创建一个新的项目。我们需要在这里添加monogame的模板。
根据Monogame团队的最新更新,您可以通过执行以下操作安装模板。
dotnet new --install "MonoGame.Templates.CSharp"

使用脚本

dotnet new -h

查看所有可用的模板,请使用以下命令。

现在,要生成项目,请使用以下命令。

dotnet new mgwindows

成功执行后,将生成[FolderName].csproj、Game1.cs、Program.cs和monogame项目的其他文件/文件夹。请注意,这个csproj是基于.NET Framework(版本为4.5,如果我没记错的话...),因此可能无法使用dotnet run命令。(如果你有点固执,你可能需要将安装了Monogame的文件夹(其中包含Monogame.target文件)复制到dotnet安装的文件夹中。)

换句话说,使用msbuild来构建和运行项目。

msbuild
如果程序没有编译时错误,则.exe文件将成功构建,并且您将看到输出文件路径,以便执行它。
如果您在Linux上工作或者由于其他原因不使用MSBuild,则不应该生成mgwindows项目。您可以选择其他方式。
dotnet new desktopgl

这个程序可以在dotnet core上运行(即您可以使用“dotnet run”命令来执行它)。


我遇到了这个错误 C:\Program Files\dotnet\sdk\3.0.100-preview-009812\MonoGame\v3.0\MonoGame.Content.Builder.targets(40,5): error MSB4062: The "MonoGame.Build.Tasks.CollectContentReferences" task could not be loaded from the assembly C:\Program Files\dotnet\sdk\3.0.100-preview-009812\MonoGame\v3.0\MonoGame.Build.Tasks.dll. Could not load file or assembly 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified - Ben
1
@KALEIDAWAVE 你好。我认为你可能正在使用dotnet core来构建一个应该构建到.NET Framework的项目(这种情况下应该使用MSBuild),或者在安装Monogame时遇到了一些错误。无论如何,我已经更新了答案,考虑到Monogame的更新,我早就应该这样做了,请尝试一下。 - AzuxirenLeadGuy
可以确认,“desktopgl”与dotnet和“dotnet run”命令兼容。在运行之前,请确保将“Program.cs”的命名空间更改为与“Game1.cs”的命名空间匹配,因为存在不匹配的错误。 - Ben

7
我在Medium上写了一个this(仅适用于Windows)的解决方案。这是一步步说明如何在VSCode终端中安装和运行带有MonoGame的dotnet。
您需要安装以下内容:
  • .NET SDK 5.0
  • .NET Core SDK 3.1
  • .NET Runtime 5.0
您可以在终端中运行dotnet并查看它是否正常工作。
  1. Install MonoGame editor:

    dotnet tool install --global dotnet-mgcb-editor
    

    and

    mgcb-editor --register
    
  2. Install MonoGame Templates:

    dotnet new --install MonoGame.Templates.CSharp
    
  3. Create a new project in the chosen template:

    dotnet new mgdesktopgl -o ProjectName
    
  4. Enter in your project with cd ProjectName and add the MonoGame package to it:

    dotnet add package MonoGame.Framework.DesktopGL --version 3.8.0.1641
    
  5. And finally:

    dotnet run Program.cs
    

1
中等文章在 Linux 上也很好用。 - Emobe
在Ubuntu 18.04下解决了我的问题。 - André Paris
1
需要安装.NET Runtime 3.1。 - André Paris

0

你完全可以在Visual Studio Code中使用MonoGame进行编程,没有任何理由不行。虽然你将缺少调试功能,并且设置会比较困难,但如果你能接受这一点,那么就继续吧。

你已经注意到,你可以轻松创建可执行的控制台应用程序。这实际上是你需要做的全部。关键在于,你必须构建目标为.NET4+或Mono的应用程序。如果你按照教程构建了.NET Core应用程序,它们将无法与MonoGame兼容(目前如此)。如果你正在构建.NET Core,请花些时间了解如何使用MSBuild或Mono构建桌面CLR应用程序。如果你需要更多信息,我可以详细介绍。你还需要确保知道如何从控制台应用程序引用其他.NET程序集。在继续之前,请先研究一下如何做到这一点。

对于Windows用户,你可以选择针对DesktopGL(OpenGL)或WindowsDX(DirectX)版本的MonoGame进行开发。我个人比较喜欢DirectX版本。你需要两样东西才能开始工作:1. MonoGame程序集,2. MonoGame管线工具(用于将你的内容编译成.XNB文件,以便导入到游戏中)。

获取MonoGame的程序集和工具,我能想到的最简单的方法是安装Visual Studio Community Edition,然后下载并安装Visual Studio的MonoGame。这将为您带来所有的工具。然后,您需要查看“C:\Program Files (x86)\MonoGame\v3.0\Assemblies”以获取适当的程序集,“C:\Program Files (x86)\MSBuild\MonoGame\v3.0\Tools”以获取MonoGame Pipeline Tool。
如果你的计算机不符合安装Visual Studio的要求,那么你并没有彻底失败。可以通过nuget获取程序集。在此处下载最新的nuget.exe:https://dist.nuget.org/index.html 然后运行:nuget.exe install MonoGame.Framework.WindowsDX 或者 nuget.exe install MonoGame.Framework.DesktopGL。这会创建一个包含lib文件夹的目录,该文件夹中包含你所需的.DLL文件的net40文件夹。对于WindowsDX,我认为你还需要DirectX运行时https://www.microsoft.com/en-us/download/details.aspx?id=34429。对于OpenGL,我认为你需要OpenAL(用于音频)https://www.openal.org/downloads/

一旦您获得程序集,您需要在构建代码时引用它们。由于您已经熟悉创建和运行控制台应用程序,我假定您知道如何进行此操作。只需引用您从Nuget下载或从安装中提取的每个托管.DLL文件即可。

为了测试,将此内容放入.cs文件中,在构建中引用MonoGame程序集,像构建控制台应用程序一样构建,并执行:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;

public class Game1 : Game
{
    GraphicsDeviceManager graphics;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
    }

    [STAThread]
    static void Main()
    {
        using (var game = new Game1())
        game.Run();
    }
}

你应该会得到一个底色为矢车菊蓝的窗口,如果没有,那么你可能没有正确生成或引用文件,或者你缺少某个依赖项。

现在的问题是如何获取Pipeline工具和MGCB.exe。如果你已经成功安装了MonoGame for Visual Studio,太好了!这些文件位于我上面提到的文件夹中。如果没有,由于某种原因,MonoGame项目不会分发这些工具的单独版本,只能通过安装程序一同安装。我将所需内容的内容放入GitHub上的一个虚拟发布中,你可以从https://github.com/srakowski/derp/releases/tag/MG下载Pipeline.zip文件并解压缩,这样就有了你所需要的东西。

创建一个空白的Content.mgcb文件并使用Pipeline.exe打开它。你应该能够添加和构建内容文件。你需要将这些文件复制到与 .exe 文件相同的目录中。通常情况下,这些文件被放置在一个名为 Content 的文件夹中,并且 Content.RootDirectory = "Content"; 被添加到游戏的构造函数中。

一旦您成功完成所有这些工作,您就可以自由地创建您想要的游戏。如果您遇到问题,请告诉我,我们会解决问题。


我有一种感觉这会行。现在有一个小问题。我已经几乎添加了monogame的程序集,但当我尝试恢复它们时出现了错误。 - AzuxirenLeadGuy
包MonoGame.Framework.WindowsDX 3.5.1.1679与netcoreapp1.0 (.NETCoreApp,Version=v1.0)不兼容。包MonoGame.Framework.WindowsDX 3.5.1.1679支持:net40 (.NETFramework,Version=v4.0)。一个或多个包与.NETCoreApp,Version=v1.0不兼容。 - AzuxirenLeadGuy
现在该怎么办? - AzuxirenLeadGuy
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Shawn Rakowski
我做了很多变通,突然意识到一个可怕的事实......我正在使用32位系统。所以我四处寻找,并几乎制作了一个Monogame exe,但最后它显示了64位兼容性问题。 - AzuxirenLeadGuy

-1
我在Visual Studio上试过Monogame,并且拥有一台Windows PC。所以我可以肯定地说,Monogame在Windows上是可行的。回答你的问题。
然而,如果你想在没有Visual Studio的情况下尝试,我认为你不会取得多大进展,因为需要几个内置工具才能制作一个合格的项目。而且你也无法进行调试。如果不能使用Visual Studio,你的开发条件将受到很大限制。
尝试清理你的PC以释放一些空间。使用Visual Studio确实是更好的选择。

1
请纠正我,但我相信想要通过VS代码获得运行的可执行的Monogame应用程序需要两件事情:Monogame库和(至少)DirectX的编译器。这些中哪一样无法在VS Code中实现?顺便说一句,我可以接受在VS Code中无法进行调试(目前...)。 - AzuxirenLeadGuy
抱歉,我不能回答那个问题,因为我从未离开过Visual Studio这个编程环境。 - Steven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接