У меня довольно большое решение проектов C# в Visual Studio. Я хочу перенести некоторые из этих проектов на работу в МОНО и запустить на MAC. Конечно, некоторые вещи не работают, и некоторые вещи, которые я не хочу переносить, потому что они не применимы к MAC.Каков стандартный способ организации проектов Visual Studio и кода для .NET. Кросс-платформенная разработка
Один из подходов - это решение и проектные конфигурации. Это позволяет мне исключать проекты, которые я не хочу создавать (к сожалению, Visual Studio не делает это легко видимым, но в любом случае ...).
Второй подход, который мог бы работать в тандеме с первым, - использовать пред компиляторные директивы, такие как #if MONO, а затем сделать что-то в этой точке. Это хорошо, но затем создает несколько версий одной и той же сборки. Как отличить два от друг друга после компиляции? Это проблема?
Даже если работают два лучших подхода, иногда я хочу часть большого проекта. Я не хочу проходить через 20 или около того файлов и помещать #if MONO? Я могу захватить файл проекта вручную, но на визуальной студии нет видимости. Никто в команде не может сказать, что происходит, если они не выгружают проект и не открывают XML и не смотрят. Это звучит довольно сумасшедшим. Чтобы усугубить ситуацию, иногда проект ссылается на что-то, и я хочу исключить ссылку для МОНО. Теперь мне нужно отредактировать csproj.
Я могу разделить проект, но что, если в какой-то момент я хочу портировать еще одну платформу. Пересечениям платформы требуется, какой код может сходить с ума. Чтобы усугубить ситуацию, у меня могут быть проекты, ссылающиеся на этот крупный проект, который затем может также разделиться. Это все работает, но это вызовет перегрузку проекта, не так ли?
Я не могу найти хорошее чистое решение. Какие-нибудь советы? Есть ли стандарт для этого, я могу следовать. Если у VS было больше видимости в редактировании файла csproj, это может сработать.
FWIW: У меня была аналогичная проблема с реализацией библиотеки как для WPF, так и для Silverlight: в коде я просто использовал некоторые #if для выбора ветки в зависимости от платформы (часто разные параметры); для ссылок я создал некоторые «прокси-проекты», по одному для каждой реализации, которые были просто полезны для ссылки на правильную версию библиотеки (это было основано на текущей конфигурации сборки WPF/SILVERLIGHT); Я учитывал общий код в выделенных проектах, дополненных «.Common». В конце концов, это было довольно чисто и полезно, вам просто нужно было запомнить новый код в проектах «.Common». – Pragmateek
Не могли бы вы привести некоторые конкретные примеры того, что работает на платформе, а не на другом? – Pragmateek
Существует много разных примеров.Тот, который наиболее расстраивает, - это когда у вас большой проект, и вы только хотите скомпилировать половину его в MONO для MAC OSX, а не для остальных (потому что вам не нужны остальные и потому, что он не будет компилироваться, даже если вы нуждался в этом). Я мог бы разделить его на два проекта, но что, если бы у меня была еще одна платформа (скажем, MAC Linux), которая, случается, имеет некоторые общие черты с окнами и другие вещи, общие с MAC. Что теперь? – Mark