Мультиплатформенный файл проекта MSBuild - PullRequest
2 голосов
/ 11 мая 2011

В настоящее время я работаю над проектом, исходный код которого должен быть максимально переносимым; проект (в 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; однако формат довольно сложный, и теперь я прошу вашей помощи!

Есть ли способ указать в файле проекта, что тип проекта присутствует, только если конкретная конфигурация выбрана независимо от того, какую среду я использую?

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Общий подход примерно такой;условие, которое постепенно строит ваше свойство, ссылаясь на любое значение, которое свойство может уже иметь:

<ProjectTypeGuids
   Condition="'$(BuildingInsideVisualStudio)' != 'true'"
   >;{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}"</ProjectTypeGuids>
<ProjectTypeGuids>{OTHER-GUIDS-HERE}$(ProjectTypeGuids)</ProjectTypeGuids>

Это обнаружит условие VS (при построении) и пропустит unConwn guid.Однако я не уверен, будет ли это работать при открытии проекта, это свойство может применяться только к зданию.Для здания на Mono может существовать аналогичное свойство "sentinal", и вы можете отменить условие.

0 голосов
/ 11 мая 2011

Я решил несвязанную, но очень похожую проблему кроссплатформенной разработки, исключив файлы, которые выглядели капризными при переходе между Linux и Windows. Я держу свой проект под контролем исходного кода и использую его для совместной работы. http://www.aydabtudev.com/2011/05/what-goes-into-source-control-android.html

Это не один к одному для вашей проблемы, но он может дать вам подсказки / идеи о том, как решить вашу проблему.

...