升级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
我正在为以下类型获取这些:
- Texture2D
- 图形设备
- 颜色
- 向量4
- 数学助手
更新:
我试图从项目中删除 XNA,仅使用 Monogame。删除程序集引用和 "using" 语句会导致以下类型的大量 "type or namespace not found" 错误:
- Texture2D
- 游戏
- 游戏时间
- SpriteBatch
- 音效
- 和许多其他人
我已经有了对 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。这些也必须进行大量重构。
我刚刚下载了最新版本的 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
- 图形设备
- 颜色
- 向量4
- 数学助手
更新:
我试图从项目中删除 XNA,仅使用 Monogame。删除程序集引用和 "using" 语句会导致以下类型的大量 "type or namespace not found" 错误:
- Texture2D
- 游戏
- 游戏时间
- SpriteBatch
- 音效
- 和许多其他人
我已经有了对 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。这些也必须进行大量重构。