Основная идея заключается в том, чтобы украсить ваш код директивами компилятора #if для каждой версии фреймворка?
#if CFNET
// .net CF code
#else
// .net code
#endif
Здесь у вас есть два варианта:
A)1 файл проекта с пользовательскими настройками сборки
Если вы хотите, чтобы все было в 1 файле csproj, вам необходимо изменить его вручную.Поскольку это файл msbuild, это скорее проблема msbuild.Я полагаю, вам нужно будет сделать следующие вещи:
- Использовать 2 имени платформы, скажем "NET" и "CF" (вместо значения по умолчанию Any CPU или x86)
Определить постоянную CF (С этого момента Edit csproj):
<PropertyGroup Condition="'$(Platform)' == 'CF'">
<DefineConstants>CF</DefineConstants>
</PropertyGroup>
Импорт правильных целей сборки в зависимости от выбранной платформы:
<Import Condition="'$(Platform)' == 'NET'" Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Condition="'$(Platform)' == 'CF'" Project="$(MSBuildToolsPath)\<CFtargets>.targets" />
Я не знаю имя файла назначения CF, так как у меня его не установлено.Это может быть где-то в C:\Windows\Microsoft.NET\**.targets
B) 2 файла проекта, каждый из которых содержит соответствующую конфигурацию сборки
Как я изначально указывал, итакже некоторые комментаторы отметили, что лучшее решение - это иметь 2 файла проекта, которые вы синхронизируете.Вы можете иметь одинаковые исходные файлы в обоих файлах проекта.
Таким образом, идея (вместо того, чтобы каждый раз копировать список файлов вручную) -
- - подумать об использовании шаблонов T4, чтобы синхронизировать исходные файлы (и иметь 2 решения).таким образом, вам не будет предложено каждый раз перезагружать все решение) или
изменить два файла csproj и использовать подстановочный тег , подобный следующему:
<Compile Include="**/*.cs"/>