Как создать несколько профилей сборки - PullRequest
1 голос
/ 27 февраля 2012

Мы разрабатываем игру для Windows Phone и хотим портировать ее на Android и iOS. Конечно, мы хотим сохранить только одну исходную базу. Сказав, что мне интересно, позволяет ли MonoDevelop определять несколько профилей сборки в одном решении, то есть профиль сборки для Windows Phone, профиль сборки для Android и профиль сборки для iOS.

Любая помощь будет очень признательна. Спасибо, J3D

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Ну, да, и нет.

Чего вы не можете сделать, так это иметь решение MyGame.sln с одним проектом MyGame.csproj и иметь цели сборки, такие как iOS, Android и WP.

Но все, что вам нужно сделать, это: Создать решение, которое имеет много проектов: MyGame.Android.csproj, MyGame.iOS.csproj, MyGame.WP.csproj.Но перед тем, как расстроиться, вы можете использовать точно такие же файлы кода - просто добавьте их как связанные файлы.

Каждая платформа - не цель сборки, а отдельное приложение.Так же, как вы не можете запустить приложение Android на iOS, вы не можете скомпилировать проект для более чем одной платформы.Так же, как вы не можете использовать обычную библиотеку классов с Silverlight, вы не можете использовать библиотеку Android с Windows Phone.Но ничто не мешает вам использовать одни и те же файлы кода.

Итак, что вам нужно сделать, это:

-- MyGame.sln
-- -- Game.Android.csproj
-- -- -- CoolFile.cs <--\
-- -- Game.iOS.csproj   |
-- -- -- CoolFile.cs <--| - these are the same files
-- -- Game.WP.csproj    |
-- -- -- CoolFile.cs <--/

Если ваша игра требует много файлов, может быть проще разбитьфайлы в библиотеку:

-- MyGame.Android.sln
-- -- Game.Android.csproj
-- -- -- Activity1.cs                    Not shared (different on each platform)
-- -- Game.SharedLibrary.Android.csproj
-- -- -- CoolFile.cs                     Shared code file

-- MyGame.iOS.sln
-- -- Game.iOS.csproj
-- -- -- ViewController1.cs              Not shared (different on each platform)
-- -- Game.SharedLibrary.iOS.csproj
-- -- -- CoolFile.cs                     Shared code file

Но если вы используете MonoGame или что-то подобное, вы сможете повторно использовать весь код и просто ссылаться на файлы.Итак, вы должны создать один проект (и библиотечные проекты) для каждой платформы и просто связать файлы.

1 голос
/ 27 февраля 2012

Решение Мэтью правильное, но я бы хотел немного подробнее остановиться на конфигурации решения и проекта.

Конфигурации сборки решения и проекта в MonoDevelop работают точно так же, как Visual Studio.Решение может быть нацелено на любую смесь вещей, на которые могут ориентироваться его проекты.Однако для каждой платформы, на которую вы ориентируетесь, требуется особый тип проекта, поэтому один проект не может быть нацелен на несколько платформ.Однако ваше решение может содержать несколько проектов, каждый из которых предназначен для отдельной платформы.Он также может содержать библиотеки, содержащие общий код для этих проектов.

Предположим, у вас есть решение, содержащее четыре проекта:

  1. SharedLibrary
  2. MonoForAndroidProject
  3. MonoTouchProject
  4. WindowsPhoneProject

Предположим, что каждый из них имеет конфигурации проекта по умолчанию для этих типов проектов.

Конфигурации вашего решения, то, что вы видите вВыбор настроек на панели инструментов, может быть любым, что угодно - имена не имеют особого значения.Каждый из них может сопоставляться с любым набором (или подмножеством) проектов и конфигураций проектов.

Например, у вас может быть четыре конфигурации отладки:

  1. DebugIPhone : сопоставление с Отладка | AnyCPU конфигурация SharedLibrary и Debug | iPhone конфигурация MonoTouchProject
  2. DebugIPhoneSimulator : сопоставление с Debug | AnyCPU конфигурация SharedLibrary и Debug | iPhoneSimulator конфигурация MonoTouchProject
  3. DebugAndroid: сопоставление с Отладка | AnyCPU конфигурация SharedLibrary и Отладка | AnyCPU конфигурация MonoForAndroidProject
  4. DebugWinPhone : сопоставление с Отладка | AnyCPU конфигурация SharedLibrary и Отладка | AnyCPU конфигурация WindowsPhoneProject

Еще один пример, вы можете иметь конфигурацию выпускагарантия, которая собирает все пакеты устройств: Release | AnyCPU конфигурация SharedLibrary и Release | iPhone конфигурация MonoTouchProject , Релиз | AnyCPU конфигурация MonoForAndroidProject , Релиз | AnyCPU конфигурация WindowsPhoneProject .

Вы также можете добавить специфичные для цели конфигурации проектав SharedLibrary с символами, определенными для воздействия на директивы #if в исходном коде, и сопоставьте их с соответствующими конфигурациями решения, хотя это не совместимо с наличием единой конфигурации для всех устройств.

Прямо сейчас вы столкнетесь с несколькими проблемами с вышеуказанным решением.

Во-первых, MonoDevelop не может загружать и создавать проекты Windows Phone, а Visual Studio не может загружать и создавать проекты MonoTouch.Таким образом, вы получите сообщение об ошибке при загрузке в любую IDE, но другие проекты все равно будут работать.

Во-вторых, не существует типа библиотеки, на который могут ссылаться все типы проектов.Вы могли бы иметь возможность использовать, например, проект библиотеки MfA и ссылаться на него как dll из других типов проектов.Другая возможность может состоять в том, чтобы иметь несколько библиотечных проектов, включающих в себя одни и те же файлы - эти проекты могут находиться в одном каталоге и содержать одни и те же файлы на месте, или они могут находиться в разных местах и ​​включать файлы в качестве ссылок на файлы.Вы можете использовать компоновщик проекта Visual Studio для их синхронизации.

Некоторые люди предпочитают иметь несколько файлов решений, по одному для каждой платформы.У вас есть большая гибкость:

  • они могут включать в себя одни и те же проекты, или отдельные проекты, или смесь
  • их проекты могут включать (или связывать) одни и те же файлы или разныефайлы или смесь
  • они могут находиться в одних и тех же каталогах, или иметь отдельные каталоги, или как смесь
...