Как я могу переключить целевую платформу моего решения VS 2008 между Windows CE и Winforms?

Я в процессе переноса устаревшего проекта Windows CE / Compact Framework с VS 2003 в режиме XP с.NET 1.1 на VS 2008 и.NET 3.5

Поскольку отладка является такой болью при попытке нацеливания на портативное устройство (нет эмулятора для конкретного устройства, на которое я нацеливаюсь, Motorola 3190), я хочу переключить свой проект между таргетингом на Windows CE и Winforms (я буду отлаживать его как Winforms приложение обычно, периодически устанавливая его в Windows CE, чтобы собрать и загрузить на устройство). Как я могу это сделать? Сейчас я не понимаю, как Visual Studio знает, что это проект Windows CE / CF.

Это так, потому что в Project Properties есть вкладка Devices, и когда я F5, вызывается эмулятор (своего рода общий).

Но на вкладке "Свойства проекта" приложения раскрывающийся список Target Framework пуст и недоступен. Тип вывода - приложение Windows. Я думаю, что Target Framework будет установлен на Windows CE или что-то подобное. Очевидно, это где-то установлено, но где? Как я могу переключаться между тем, чтобы он выполнялся как CE / CF и как "старый добрый" проект Winforms?

При выборе "Проект"> "Изменить целевую платформу" в качестве текущего значения отображается "Windows CE", но выпадающий список "Изменить на:" содержит только:

Pocket PC 2003
Windows Mobile 5.0 Pocket PC SDK
Windows Mobile 5.0 Smartphone SDK
Windows Mobile 6 Professional SDK

На вкладке "Свойства" проекта Devies есть еще много опций в раскрывающемся списке "Целевое устройство:", но, похоже, для меня это не имеет значения.

Если я выгружаю проект и выбираю "Редактировать bla.csproj", я вижу следующие записи в этом файле.csproj:

<NativePlatformName>Windows CE</NativePlatformName>
. . .
<PlatformFamilyName>WindowsCE</PlatformFamilyName>
. . .
<Reference Include="Microsoft.WindowsCE.Forms">
  <Name>Microsoft.WindowsCE.Forms</Name>
</Reference>
. . .
<Import Condition="'$(TargetFrameworkVersion)' == 'v3.5'" 
Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

... и, возможно, по крайней мере один из них имеет значение здесь (не каламбур), но если так, на что я должен изменить его, и если я должен изменить его, я должен изменить это прямо или косвенно? Если последнее, то как?

ОБНОВИТЬ

Пытаясь добавить все файлы *.cs и *.resx в проект Winforms, и атаковав таким образом двойственность, я получаю следующую ошибку в некоторых, но не во всех моих файлах *.resx:

Неверный файл Resx. Ввод ResX недействителен. Не удается найти допустимые теги "resheader" для имен типов читателей и писателей ResX.

Что это значит? Решение проблемы C# resx file: похоже, не относится к моей ситуации, поскольку файлы out-of-kilter / off-the-rails уже имеют этот формат:

<resheader name="resmimetype">
  <value>text/microsoft-resx</value>
</resheader>

1 ответ

Решение

Я больше этим не занимаюсь (см. * Примечание внизу), но раньше я держал все свои различные проекты в одном решении.

  • У меня был основной проект приложения MDI.

  • У меня было 3 небольших проекта в одной форме (один на сервере и 2 разных приложения для печати этикеток)

  • Было 2 проекта для Windows Mobile (один называется Packout, другой - Inspections)

Эти проекты уже размещают свои файлы на моем ПК, где у меня есть папка Common с классами, которые используются во всем решении.

Скриншот

Возьмите Database.cs класс, показанный выше: независимо от того, является ли мой проект формой MDI, автономной формой или приложением Windows Mobile, они, как правило, все собираются подключаться к одной и той же базе данных компании.

Вместо добавления файла в ваш проект (который создает копию файла и помещает копию в ваш проект), добавьте файл как ссылку:

скриншот добавить как ссылку

Я должен признать: я никогда не замечал, что кнопка Add была ctacke, пока ctacke указал мне на это много лет назад.

Теперь, когда вы редактируете это Database.cs файл в одном проекте, он будет автоматически обновляться во всех других проектах, с которыми он связан.

Предупреждение!

Это действительно представляет проблемы, хотя!

Иногда вам НУЖНЫ вещи в ваших Windows Forms, которые Windows Mobile просто не поддерживает. Звучит безумно, но это правда. Windows Mobile просто не будет делать все это. Поэтому вместо того, чтобы зацикливаться на написании всех своих классов для самой слабой ссылки (Windows Mobile), включите некоторые #define заявления в вашем классе.

Ниже приведен скриншот проекта WM5, который теперь имеет System.ComponentModel закомментирован из кода, потому что элемент управления BackgroundWorker не определен в Windows Mobile:

снимок экрана, если ACP_SUITE

Что это делает для вас?

Теперь вы можете иметь несколько проектов в рамках вашего решения. В зависимости от того, на каком из них вы хотите протестировать свой код, просто щелкните правой кнопкой мыши по этому проекту и выберите Set as StartUp Project.

снимок экрана Установить как автозагрузка

Теперь вы можете протестировать и разработать приложение для Windows Form для базового кода или любого другого эмулятора, который вы предпочитаете (если это не один из тех неприхотливых iPhone-ов и устройств Android), а затем переключиться обратно на свою старую компанию Clunker для окончательного тестирования и проверки. настройка.

* С тех пор, как мы получили VS2010 и VS2012, я не смог сохранить все свои проекты в рамках одного решения. Однако большинство файлов по-прежнему связаны с отдельными проектами.

Другие вопросы по тегам