Как организовать проекты Windows и Windows Phone для повторного использования существующей кодовой базы?

Прежде всего, я хочу сказать, что прочитал эти два обсуждения: Как организовать базу кода Windows Phone для таргетинга на платформы 7.x и 8 и Windows Phone 7 / WPF - Совместное использование базы кода. Итак, я знаю о типе проекта Portable Class Librariy, который может быть ответом на мой вопрос. Но это не ответ на мой случай.

Проблема

В моем проекте WindowsClassLibraryNetFw35 есть старая кодовая база. Мне нужно, чтобы этот проект был библиотекой классов, ориентированной на .NET Framework 3.5. Причина в том, что некоторые зависимые приложения развертываются на машинах клиентов, на которых не установлена ​​.NET Framework 4+. К сожалению, я не могу заставить своих клиентов обновить свою среду.

Теперь я создаю новый проект (ы) для Windows 8 и Windows Phone 8. Как вы знаете, проекты Windows Phone 8 потерпят неудачу, когда я попытаюсь сослаться на свою старую библиотеку, потому что это несовместимый проект Windows Phone (см. Снимок экрана). введите описание изображения здесь

Вопрос

Как лучше всего реорганизовать типы моих проектов, чтобы иметь возможность поддерживать как старые, так и новые проекты?


person Igor Soloydenko    schedule 30.12.2012    source источник


Ответы (1)


Я бы по-прежнему старался заставить работать PCL, но если это не удастся, вы можете использовать один и тот же код в двух разных проектах.

Создайте два разных проекта: один для Windows Phone, а другой - для приложения Windows Store. Добавьте файл в один, а затем добавьте этот другой файл в качестве ссылки к другому проекту. Это означает, что у вас есть один исходный файл между двумя разными проектами, но он будет скомпилирован с соответствующими инструментами времени выполнения. Затем вы можете делать такие вещи в своем коде:

void Foo()
{
    #if WinRT
        //WinRT specific code here
    #elif WindowsPhone
        //Silverlight specific code here
    #endif
}

Просто добавьте соответствующие константы компилятора на вкладку «Сборка» проектов Windows Phone и WinRT. Это гораздо более безвкусное решение, но иногда это единственный подход, который работает.

person vcsjones    schedule 30.12.2012
comment
Спасибо! Что ж, это решение для меня не ново. Проблема в том, что нет простого способа использовать эти файлы в каждом новом проекте, который я создаю. На добавление этих файлов уйдет много времени, верно? Возможно, я мог бы создать шаблон *.csproj, который будет содержать все файлы из проекта (ов) библиотеки. У этого подхода также есть проблема. Если я добавляю новый файл в проект библиотеки, мне нужно добавить ссылку на него в каждый уже существующий клиентский проект и обновить шаблон csproj. То, что я пытаюсь сказать, кажется, это много скучных рутинных действий, которые отвлекают меня от процесса разработки. - person Igor Soloydenko; 31.12.2012
comment
@keykeeper К сожалению, я думаю, это все, что есть. Возможно, вы сможете разработать инструмент, который поможет в этом процессе, но решение заключается в использовании .NET 4.0 и PCL. - person vcsjones; 31.12.2012
comment
Я НЕ МОГУ использовать PCL, потому что некоторые из моих старых проектов нацелены на .NET Framework 3.5, и я не могу заставить клиентов обновить его до версии 4. - person Igor Soloydenko; 31.12.2012