1

我遇到了一个问题,我在 Monogame 和 XNA 库之间不断出现歧义错误。无论我做什么,我都无法编译它。我已经从我的计算机上删除了 XNA,但错误仍然存​​在。完整的错误是:

Error   4   Argument 1: cannot convert from 'Microsoft.Xna.Framework.Vector2 [c:\Program Files (x86)\MonoGame\v3.0\Assemblies\WindowsPhone\x86\MonoGame.Framework.dll]' to 'Microsoft.Xna.Framework.Vector2'

在诸如以下的行上:

        EngineGlobal.world = new World(new Vector2(0,9.8f), false);

有人对如何摆脱冲突有任何建议吗?我想继续在 monogame 而不是 XNA 上进行开发,因为代码将被移植到 Android、iPhone 等的 MonoGame 环境中。

任何帮助是极大的赞赏!

4

3 回答 3

4

我的回复有点晚了,但是如果您查看 MonoGame 项目模板的作用,您会发现在 csproj 文件中定义了一个额外的构建目标。

在我的情况下添加这个:

<Target Name="MonoGame_RemoveXnaAssemblies" AfterTargets="ImplicitlyExpandTargetFramework">
<Message Text="MonoGame - Removing XNA Assembly references!" Importance="normal" />
<ItemGroup>
  <ReferencePath Remove="@(ReferencePath)" Condition="'%(Filename)%(Extension)'=='Microsoft.Xna.Framework.dll'" />
  <ReferencePath Remove="@(ReferencePath)" Condition="'%(Filename)%(Extension)'=='Microsoft.Xna.Framework.GamerServices.dll'" />
  <ReferencePath Remove="@(ReferencePath)" Condition="'%(Filename)%(Extension)'=='Microsoft.Xna.Framework.GamerServicesExtensions.dll'" />
  <ReferencePath Remove="@(ReferencePath)" Condition="'%(Filename)%(Extension)'=='Microsoft.Xna.Framework.Input.Touch.dll'" />
  <ReferencePath Remove="@(ReferencePath)" Condition="'%(Filename)%(Extension)'=='Microsoft.Xna.Framework.MediaLibraryExtensions.dll'" />
</ItemGroup>

到带有模棱两可的引用的 csproj 解决了这个问题。

于 2013-08-05T11:49:29.717 回答
0

这种错误几乎总是与引用有关。如果您绝对确定它没有引用 XNA,它可能引用了不同版本的 MonoGame。

尝试从所有项目中删除所有 MonoGame 和 XNA 引用并重新引用它们。这包括已经用 XNA 编译的项目。它们可能需要重新编译。

于 2013-03-28T10:49:19.120 回答
0

据我所知,Farseer 可以在多个平台上运行。它通过条件编译(部分)实现了这一点。

我注意到在 Farseer 解决方案中重新定义了几个 XNA 类型,但使用了原始的 Microsoft XNA 命名空间。

这通常不是问题,因为这些定义在 XNA 桌面、Windows Phone 和 XBox 等平台上被排除在外。

然而,当 Farseer 与一个意想不到的平台一起使用时,这确实会成为一个问题:MonoGame。

为了解决这个问题,我只需下载源代码并删除带有 XNA 重新定义的文件。

或者

如果您正在使用源代码,您应该能够通过定义以下任何一个条件编译符号来防止这些定义被编译:

  • XNA
  • WINDOWS_PHONE
  • XBOX
  • ANDROID

这可以在项目属性的Build选项卡中完成。

或者更好的是,定义一个MONOGAME符号并将其添加到条件编译行:

#if !XNA && !WINDOWS_PHONE && !XBOX && !ANDROID && !MONOGAME

于 2014-02-15T00:07:40.733 回答