Общий исходный код C # для Windows и Windows Mobile - PullRequest
6 голосов
/ 02 декабря 2008

У меня есть цель создать приложение с пользовательским интерфейсом, которое будет работать как на Windows Mobile, так и на «обычном» рабочем столе Windows. Приоритет для того, чтобы он «хорошо выглядел» под Windows Mobile, а для настольных Windows все нормально, если он искажен. Прежде чем потратить несколько дней, я хотел бы услышать, возможно ли это для начала. Этот вопрос состоит из нескольких частей:

  1. Является ли .NET Compact Framework подмножеством "нормальных" (пожалуйста, отредактируйте) .NET Framework? Если нет, есть ли в MSDN какая-либо информация о классах, находящихся в .NET Compact Framework, но не в «обычной» (опять же, отредактированной) среде?

  2. Одинаково ли поведение общих классов в обеих платформах?

  3. Возможно ли иметь одно решение / проект Visual Studio 2005 для обеих платформ? Если да, то как его настроить?

  4. Любые другие комментарии и советы? Любые соответствующие ссылки?

Ответы [ 5 ]

10 голосов
/ 02 декабря 2008
  1. CF содержит подмножество полного каркаса (FFx), но это не чистое подмножество. На самом деле в CF есть несколько вещей, которых нет в FFx, что делает его немного сложнее. Приложения CF также, за исключением самых элементарных случаев, используют P / Invoke. Эти вызовы никогда не совпадают с настольного компьютера на устройство, поэтому они не являются переносимыми напрямую (хотя с небольшой абстракцией вы можете иметь независимый от платформы интерфейс).
  2. По большей части поведение такое же. Я видел в некоторых случаях , где это не , и я вспоминаю, что некоторые последовательности событий не всегда были идентичными, поэтому доверяйте, но проверяйте.
  3. Это возможно благодаря очень тщательному массажу конфигураций, но я, конечно, не рекомендую его. Это трудно поддерживать и очень хрупко. Вместо этого есть два файла проекта, один для CF и один для FFx. В любом случае, вы, скорее всего, будете иметь различия в коде Добавьте файлы кода в виде ссылок на каждый проект, чтобы они оба использовали один и тот же физический исходный файл. Я бы порекомендовал использовать какую-то форму CI , чтобы гарантировать, что они оба строят все время.
  4. Взгляните на статью MSDN Дэна Мота и записи в блоге об обмене ресурсами кода.
6 голосов
/ 02 декабря 2008

P.S. Я нашел плакат онлайн - он покажет вам все классы, которые являются CF. Я заказал это у Microsoft, потому что Kinkos хотел, чтобы 65 долларов распечатали для меня в цвете! Microsoft прислала мне пару бесплатных копий - все, что мне нужно было сделать, это спросить:

http://www.microsoft.com/downloads/details.aspx?familyid=7B645F3A-6D22-4548-A0D8-C2A27E1917F8&displaylang=en

У меня он висит в моей кабине, и это находка, когда я пытаюсь вспомнить, в каких классах пространств имен можно найти.

3 голосов
/ 02 декабря 2008

Хороший вопрос из нескольких частей:

  1. Различия между полной платформой и компактной платформой
  2. В приведенной выше статье есть ссылки на соответствующую документацию о различиях в поведении классов (в некоторых ситуациях оно определенно различается)
  3. Очень просто! Создайте единое решение с набором базовых функций в Библиотеке классов , затем создайте два клиентских проекта (один для вашего настольного приложения и один для приложения для Windows Mobile). Наконец, добавьте ссылки на библиотеку классов в оба клиентских проекта.
  4. В зависимости от масштаба проекта, над которым вы работаете, вы можете проверить шаблон Model View Controller . Это может быть немного для вашего проекта, но если вы хотите поделиться поведением пользовательского интерфейса между проектами, это может спасти жизнь.

Надеюсь, это поможет!

2 голосов
/ 02 декабря 2008

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

С некоторыми усилиями возможно разделение логического кода, в частности служебных библиотек, - но им нужны разные файлы csproj (так как они имеют совершенно разные «цели» времени компиляции). Чтобы сократить объем обслуживания, вы часто можете обмануть, взломав csproj, чтобы использовать подстановочные знаки, например: здесь :

<ItemGroup>
  <Compile Include="..\protobuf-net\**\*.cs" />
</ItemGroup>

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

1 голос
/ 02 декабря 2008

1). Существует Compact Framework, так что да; И это подмножество полной .NET Framework. У меня есть плакат на моей стене в офисе, на котором обозначена целая куча классов, которые работают на CF ... Я не припоминаю, если есть какие-то, которые являются чисто CF, но я предполагаю, что там должен быть какой-то. Есть несколько хороших книг на эту тему - одна от Пола Яо, которая у меня есть, а другая от Энди Уигли - обе доступны на Amazon.

2). Насколько я знаю, классы CF и full framework работают одинаково, но их нужно компилировать для разных целей.

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

4). Пойдите в свой местный книжный магазин и пролистайте те две книги, которые я упомянул. Как я уже сказал, у меня есть один от Paul Yao, и он, кажется, покрывает большую часть того, что я мог себе представить на компактном устройстве.

...