Моноигра неоднозначная Vector2
У меня возникла проблема, из-за которой у меня возникают ошибки неоднозначности между библиотеками 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);
У кого-нибудь есть предложения как избавиться от конфликта? Я хотел бы продолжить разработку на моногамной, а не на XNA, поскольку код будет перенесен в среды MonoGame на Android, iPhone и т. Д.
Любая помощь очень ценится!
3 ответа
Немного опоздал с моим ответом, но если вы посмотрите, что делают шаблоны проектов 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 с неоднозначными ссылками решил проблему.
Такая ошибка почти всегда связана со ссылками. Если вы абсолютно уверены, что это не ссылка на XNA, это может быть ссылка на другую версию MonoGame.
Попробуйте удалить все ваши ссылки MonoGame и XNA из всех проектов и повторно ссылаться на них. Это включает в себя проекты, которые уже скомпилированы с XNA. Возможно, они должны быть перекомпилированы.
Насколько я могу судить, Farseer был написан для работы на нескольких платформах. Это достигается (частично) путем условной компиляции.
Я заметил, что несколько типов XNA переопределены в решении Farseer, но с использованием оригинального пространства имен Microsoft XNA.
Обычно это не проблема, поскольку эти определения исключены на таких платформах, как рабочий стол XNA, Windows Phone и XBox.
Однако это становится проблемой, когда Farseer используется с неожиданной платформой: MonoGame.
Чтобы обойти это, я просто скачал исходный код и удалил файлы с переопределениями XNA.
АЛЬТЕРНАТИВЫ
Если вы работаете с исходным кодом, вы сможете предотвратить компиляцию этих определений, задав любой из следующих условных символов компиляции:
XNA
WINDOWS_PHONE
XBOX
ANDROID
Это можно сделать на вкладке Build свойства вашего проекта.
Или даже лучше, определить MONOGAME
и добавьте его в строку условной компиляции:
#if !XNA && !WINDOWS_PHONE && !XBOX && !ANDROID && !MONOGAME