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

Nig*_*mes 2 c# xna visual-studio monogame

我刚刚下载了最新版本的 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
Run Code Online (Sandbox Code Playgroud)

我得到以下类型的这些:

  • 纹理2D
  • 图形设备
  • 颜色
  • 矢量 4
  • 数学助手

更新:

我试图从项目中删除 XNA,只使用 Monogame。删除程序集引用和“使用”语句会导致以下类型的大量“未找到类型或命名空间”错误:

  • 纹理2D
  • 游戏
  • 游戏时间
  • 精灵批处理
  • 音效
  • 和许多其他人

我已经有了对 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
Run Code Online (Sandbox Code Playgroud)

更新:

项目 -> 属性 -> 目标框架将其从“.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
Run Code Online (Sandbox Code Playgroud)

我现在为 Microsoft.Xna.Framework 保护伞下的所有内容获取此信息,包括图形、输入、音频、内容、GamerServices 等。

Nig*_*mes 5

现在一切正常(几乎)。不幸的是,这不是一个快速解决方案。这是我为使其正常工作所做的一切的列表:

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

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

使用语句

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

我对 Monogame 有错误的程序集引用。

这个很棘手,因为参考管理器显示了其中的 14 个,其中没有一个只是带有版本号的“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 使我在此期间编写的一些类无效,因为 Monogame 似乎不喜欢尝试从主游戏类之外使用 GraphicsDevice。这些也必须进行大量重构。