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

时间:2016-06-16 22:55:56

标签: c# visual-studio xna 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

我得到以下类型的这些:

  • 的Texture2D
  • 的GraphicsDevice
  • 颜色
  • 的Vector4
  • MathHelper

更新

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

  • 的Texture2D
  • 游戏
  • GameTime
  • SpriteBatch
  • SoundEffect中
  • 和其他许多人

我已经有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等。

2 个答案:

答案 0 :(得分:3)

现在一切正常(差不多)。不幸的是,这不是一个快速解决方案。这是我为使其工作所做的一切清单:

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

必须将其设置为" .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。这些也必须进行大量重构。

答案 1 :(得分:0)

您的项目和所有引用的程序集应仅引用MonoGame。 MonoGame是XNA的完全替代品,几乎可以实现所有XNA 4.0类型。这两者可能不会在一个应用程序中共存。