2013-12-02 4 views
2

Скажем, я создал и расширил проект библиотеки классов Windows Phone (WPCL) или любой другой проект библиотеки классов, предназначенный для конкретной платформы.Преобразование библиотеки классов (например, WP8, Windows Store) в библиотеку портативных классов

Скажем, теперь я рассматриваю возможность таргетинга на другую платформу .NET, например, в Windows Store, но во время создания моей библиотеки классов я решил создать платформенную библиотеку классов (например, WPCL), а не переносимый класс Библиотека (PCL).

Исходный код написан переносимым, для этого требуется файл проекта PCL (csproj).

Из сравнения WPCL и PCL csproj кажется, что только несколько свойств отличаются. Но мне нужно взломать csproj, чтобы выполнить эту работу?

В принципе, я хочу знать,

ли, есть ли способ, чтобы автоматически конвертировать конкретную платформу библиотеки классов в портативные библиотеки классов без взлома csproj файлов?

+1

Ну, вы можете просто создать проект * new * и использовать те же файлы .cs в каждом ... есть удобный «include *».cs resursive ", который может сделать его не требующим обслуживания, если вам нравится –

+0

@MarcGravell Вы говорите об« перетаскивании »файлов и папок из одного проекта в другой, нажимая клавишу ALT при отбрасывании? Если это это то, что вы имеете в виду, было бы неплохо указать, что это «не требует обслуживания» с точки зрения «отброшенных» файлов, а если вы позже добавите новые файлы в файлы «источника» или удалите их, эти изменения будут * не * отражаются в проекте «destination». –

+2

@ Аnders нет, я имел в виду то, что я сказал. Вы можете добавлять файлы в csproj с подстановочным знаком, а не как имена - в одной папке или рекурсивно. Я использую это во всех своих мульти -target, поэтому я на самом деле когда-либо поддерживаю «основной» проект. Остальные просто используют все файлы .cs автоматически. Подстановочный знак сохраняется, поэтому он применяется как сейчас, так и в будущем. –

ответ

0

Нет, в настоящее время нет способа сделать это. Если ваш код полностью переносится, я бы предложил переключиться на PCL. Я думаю, что лучший способ сделать это - создать новый проект PCL в той же папке, отредактировать переносимый файл .csproj и скопировать элементы из файла проекта, специфичного для платформы, а затем удалить проект, специфичный для платформы, и переименовать переносимый с тем же именем, что и для старой платформы.

+2

Так что я должен был сделать это. Это много грязной работы с несколькими проектами для конвертирования. Тем не менее, я не вижу причин, по которым библиотеки классов, специфичные для платформы, - это не просто PCL с выбранной опцией одной платформы. – jaccus

+0

См. Http://stackoverflow.com/a/11965678/254041 как преобразовать библиотеку классов в переносимую библиотеку классов. – habakuk

1

Я знаю, что вы просите не-хакерский способ, но так как это довольно просто, я все равно выкладываю решение: http://geekswithblogs.net/imilovanovic/archive/2012/08/31/vs2012---how-to-manually-convert-.net-class-library-to.aspx

Это работает довольно хорошо, но это, кажется, не идеально работает для VS2013 (он не показывает диалог изменения цели, а только раскрывающийся список со всеми возможными комбинациями). Я немного поиграл и решил, как изменить csproj на портативную библиотеку, ориентированную на Windows 8.1. Я не знаю, есть ли какие-либо побочные эффекты (и, честно говоря, я точно не знаю, что я делаю), но по крайней мере я не вижу разницы между моими конвертированными и оригинальными переносимыми библиотеками, и все компилируется отлично ,

заменить оператор импорта (как правило, в конце документа) следующим:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" /> 

добавить следующие теги к первой группе свойств

<ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 
<TargetPlatformIdentifier>Windows</TargetPlatformIdentifier> 
<TargetPlatformVersion>8.1</TargetPlatformVersion> 

и, наконец, удалить TargetFrameworkTag.

Проект теперь должен быть переносным lib, ссылающимся на Windows 8.1 - просто измените его на все, что вам нравится сейчас.

Примечание: я не пробовал, но я думаю, что это работает только для VS2013 (в 2012 году используйте ссылку выше).

1

Вы можете использовать following Visual Studio Extension, чтобы сделать это автоматически.

После установки выберите «Инструменты»> «Преобразовать проекты в PCL» и выберите проекты, которые вы хотите преобразовать.

+0

В настоящее время поддерживается только Visual Studio 2013, 2012 (не 2015) – mikiqex

Смежные вопросы