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);

競合を取り除く方法について何か提案はありますか? コードは Android や iPhone などのモノゲーム環境に移植されるため、XNA ではなくモノゲームで開発を続けたいと考えています。

どんな助けでも大歓迎です!

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

これは、プロジェクトのプロパティの[ビルド] タブで実行できます。

または、MONOGAMEシンボルを定義して条件付きコンパイル行に追加することもできます。

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

于 2014-02-15T00:07:40.733 に答える