升级Monogame:Monogame和XNA都存在该类型

Upgrading Monogame: The type exists in both Monogame and XNA

我刚刚下载了最新版本的 Monogame (3.5),但我突然对 XNA 产生了不明确的引用。我不确定我之前的版本是什么,但足以说明它已经有几年了。

我尝试在 Visual Studio 中添加和删除程序集引用,但这只会产生不同的错误。

这是确切的消息(其中之一):

Error   12  The type 'Microsoft.Xna.Framework.Graphics.Texture2D' exists in both 'C:\Program Files (x86)\MonoGame\v3.0\Assemblies\WindowsPhone\x86\MonoGame.Framework.dll' and 'C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86\Microsoft.Xna.Framework.Graphics.dll'  c:\nightmare games\games\in production\boxland incorporated\boxland (monogame)\boxland\character_control.cs 55

我正在为以下类型获取这些:

更新:

我试图从项目中删除 XNA,仅使用 Monogame。删除程序集引用和 "using" 语句会导致以下类型的大量 "type or namespace not found" 错误:

我已经有了对 MonoGame.Framework 的程序集引用。为 MonoGame 添加新的 using 语句只会导致错误:

Error   4   The type or namespace name 'MonoGame' could not be found (are you missing a using directive or an assembly reference?)  C:\Nightmare Games\Games\In Production\Boxland Incorporated\Boxland (monogame)\Boxland\Particle_Effects.cs  5

更新:

项目 -> 属性 -> 目标框架 将其从“.NET Framework 4”更改为“.NET Framework 4.5”似乎解决了 Microsoft.XNA 未被识别的问题,但这只会产生新的错误。

Error   2   The type or namespace name 'Graphics' does not exist in the namespace 'Microsoft.Xna.Framework' (are you missing an assembly reference?)    C:\Nightmare Games\Games\In Production\Boxland Incorporated\Boxland (monogame)\Boxland\Draw.cs  4

我现在在 Microsoft.Xna.Framework 范围内获取所有内容,包括图形、输入、音频、内容、GamerServices 等等。

您的项目和所有引用的程序集应仅引用 MonoGame。 MonoGame 是 XNA 的完全替代品并且实现了几乎所有的 XNA 4.0 类型。两者不能共存于一个应用程序中。

现在(几乎)一切正常。不幸的是,这不是一个快速的解决方案。以下是我为实现此功能所做的所有工作的列表:

项目 -> 属性 -> 目标框架:

这必须设置为“.NET Framework 4.5”。我相信我以前是 4.0。

使用语句

保留所有 "using Microsoft.Xna.Framework" 语句。然而,"Microsoft.Xna.Framework.GamerServices"不得不去。这个显然不再受支持(我不确定我用它做什么了)。尝试重新添加 "Microsoft.Xna.Framework" 也是一个坏主意。

我错误地引用了 Monogame。

这一个很棘手,因为参考管理器显示了其中的 14 个,其中 none 不仅仅是带有版本号的 "MonoGame.Framework"。显然它们并不完全相同。将鼠标悬停在名称上会显示不同的文件路径。我仍然不知道 Windows、Windows8 和 WindowsUniversal 之间有什么区别,但我真正需要的那个甚至都没有出现在搜索结果中。我不得不浏览到实际文件,对于常规 windows 桌面,该文件位于: C:\Program Files (x86)\MonoGame\v3.0\Assemblies\Windows\MonoGame.Framework.dll

FileMode.Open 不再有效。

这是 System.IO 的一部分,现在似乎与 Monogame 发生了冲突。解决方案是使用 "Content.Load",XNA 过去就是这样做的。

我使用 FileMode.Open 加载 Texture2D,因为旧的 Monogame 不支持编译内容。具有讽刺意味的是,发现现在支持这种格式是我升级的主要原因,但我不认为我会一次性将近 400 个精灵转换为新格式。都需要加载到新的流水线工具中编译,添加到VS工程中,然后实际加载的代码还要改。

切换回 Content.Load 使我在此期间编写的一些 classes 无效,因为 Monogame 似乎不喜欢尝试从主游戏之外使用 GraphicsDevice class。这些也必须进行大量重构。