В настоящее время я работаю над проектом, исходный код которого должен быть максимально переносимым; проект (в 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) «базовая библиотека» было невозможно скомпилировать из-за отсутствующей конфигурации типа проекта; в частности, GUID, используемый MonoTouch для <ProjectTypeGuids>
, равен {E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}
; добавив этот GUID, я теперь могу скомпилировать «базовую библиотеку» в MonoDevelop.
Проблема возникает, когда я пытаюсь повторно импортировать решение в VS: так как нет версии MonoTouch для Windows, VS не может найти надстройку для указанного типа проекта, и проект не загружается.
Глядя на спецификации файла проекта MSBuild, кажется, что есть множество опций, которые нельзя установить или изменить в редакторе проекта / решения в VS; однако формат довольно сложный, и теперь я прошу вашей помощи!
Есть ли способ указать в файле проекта, что тип проекта присутствует, только если конкретная конфигурация выбрана независимо от того, какую среду я использую?