#iphone #android #msbuild #project #multiplatform
#iPhone #Android #msbuild #проект #мультиплатформенный
Вопрос:
В настоящее время я работаю над проектом, исходный код которого должен быть максимально переносимым; то есть проект (на C #, но это не очень актуально) представляет собой приложение, которое должно выполняться на Android (с Mono-Android), на iPhone (с MonoTouch) и WinMobile (с официальной Compact Framework). Не вдаваясь в подробности, соответствующее решение MSBuild состоит из библиотеки независимой платформы (по крайней мере, с точки зрения исходного кода), в которой объявляются различные интерфейсы и классы, представляющие абстракцию каждой функции, которая не является общей для различных платформ (т. Е. пользовательского интерфейса). Кроме того, существуют соответствующие библиотеки, которые специализируются (для каждой платформы) на «базовой библиотеке»; эффективный исполняемый файл приложения — это программа, которая использует абстракцию и общие стандартные библиотеки.
Разработка на WinMobile и Android на самом деле не проблема: надстройка Mono-Android может быть установлена на VS 2010, поэтому обе платформы могут обрабатываться с помощью MS VS.
Изначально решение было создано в VS, поэтому первоначальная конфигурация и связанные проекты (Android и WinMobile) создаются автоматически.
После этого я импортировал решение в MonoDevelop под Mac (единственная платформа, которая официально поддерживается MonoTouch), и я создал проект для библиотеки iPhone; переключив конфигурацию для генерации сборок (iPhoneSimulator), «базовую библиотеку» было невозможно скомпилировать из-за отсутствующей конфигурации типа проекта; в частности, для <ProjectTypeGuids>
является {E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}
идентификатор GUID, используемый MonoTouch; добавив этот идентификатор GUID, я теперь могу скомпилировать «базовую библиотеку» в MonoDevelop.
Проблема возникает, когда я пытаюсь повторно импортировать решение в VS: поскольку версии MonoTouch для Windows нет, VS не может найти надстройку для указанного типа проекта, и проект не загружается.
Глядя на спецификации файла проекта MSBuild, кажется, что существует множество параметров, которые нельзя установить или изменить в редакторе проектов / решений в VS; однако формат довольно сложный, и теперь я прошу вашей помощи!
Есть ли способ указать в файле проекта, что тип проекта присутствует, только если выбрана конкретная конфигурация независимо от среды, которую я использую?
Ответ №1:
Общий подход примерно таков; условие, которое постепенно создает ваше свойство, ссылаясь на любое значение, которое свойство уже может иметь:
<ProjectTypeGuids
Condition="'$(BuildingInsideVisualStudio)' != 'true'"
>;{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}"</ProjectTypeGuids>
<ProjectTypeGuids>{OTHER-GUIDS-HERE}$(ProjectTypeGuids)</ProjectTypeGuids>
Это определит условие VS (при сборке) и опустит неиспользованный guid. Однако я не уверен, что это сработает при открытии проекта, это свойство может применяться только к сборке. Может существовать аналогичное свойство «sentinal» для сборки на Mono, и вы можете изменить условие.
Комментарии:
1. Я знаю, что это довольно старое, но я хотел бы отметить, что это приведет к сбою, если вы выполняете сборку с помощью msbuild.
BuildingInsideVisualStudio
запускается только при сборке из самой IDE. Это может вызвать проблемы, например, на сервере сборки, который запускает msbuild непосредственно из командной строки.
Ответ №2:
Я решил не связанную, но очень похожую проблему кроссплатформенной разработки, исключив файлы, которые проявляли себя как неисправные при переходе между Linux и Windows. Мой проект находится под управлением исходного кода, и я использовал это, чтобы все работало совместно. http://www.aydabtudev.com/2011/05/what-goes-into-source-control-android.html
Это не соотношение 1 к 1 для вашей проблемы, но это может дать вам подсказки / идеи о том, как решить вашу проблему.