Использовать старые DLL (.NET) в приложении Магазина Windows?

Я начал работу над переносом написанного мной приложения для развертывания в магазине приложений Windows 8. Это требует, чтобы приложение было написано для подмножества платформы .NET. Мое приложение следует архитектуре, в которой основные функции находятся в его собственной dll, а такие вещи, как доступ к файловой системе, выполняются через IoC. По сути, это означает, что единственной зависимостью основной dll является System. Из-за этого я подумал, что портирование будет легким делом — настройте значения IoC и подключите графический интерфейс, и тогда я буду готов к работе. Только я не могу даже сослаться на свою основную dll из приложения магазина Windows (также известного как приложение Metro).

Я что-то пропустил? Действительно ли нужно переписать мою основную dll только для включения в магазин приложений Windows 8? Нам говорят, что если вы используете хорошую архитектуру, то перенос будет легким делом, и это то, что я сделал. Это только что было большой ложью?


person Josh    schedule 25.07.2012    source источник
comment
Я предполагаю, что все упомянутые вами библиотеки DLL являются сборками .NET? На какую версию .NET Framework они ориентируются?   -  person Jonathon Reinhart    schedule 25.07.2012
comment
Вы не можете сослаться на него, потому что ваша dll не скомпилирована с профилем Metro .NET Framework. Вы НЕ ДОЛЖНЫ использовать .NET для приложений Metro, тот факт, что вы так думаете, означает, что вы не понимаете, что требуется от IS.   -  person Security Hound    schedule 25.07.2012
comment
@Ramhound Это, безусловно, возможно.   -  person Josh    schedule 25.07.2012
comment
@JonathonReinhart это сборки .NET. Они нацелены на v4 фреймворка. Но я добавлял его как ссылку на проект в VS. Приложение в стиле метро было бы просто еще одним проектом в решении — по крайней мере, так планировалось.   -  person Josh    schedule 25.07.2012


Ответы (3)


Приложения Магазина Windows (ранее называвшиеся приложениями в стиле Metro) ограничены использованием профиля .NET Core. Я добавил некоторые подробности о основном профиле в свой ответьте на этот вопрос. См. Преобразование существующего кода .NET Framework в этой статье подробнее. Это не ваша архитектура, это подмножество .NET Framework, доступное для приложения из магазина Windows. Возможно, вам придется дополнить некоторые типы, которые вы используете в .NET, типами WinRT.

person JP Alioto    schedule 25.07.2012

У меня нет обширных знаний, и я постараюсь придерживаться фактов, как я их понимаю. Платформа Metro добавляет функциональность и ограничивает функциональность. Существуют жесткие ограничения безопасности и обширные сегменты полной платформы .Net, которые недоступны (например, вы не можете использовать System.Data, некоторые из System.IO и методы доступа к файлам радикально изменились). Приложение Metro изолировано, вы не сможете рекурсивно просмотреть все файлы на жестком диске, как в стандартном приложении (мое мнение, что в дополнение к безопасности путем изоляции это поощрение, чтобы подтолкнуть вас к облако для нужд хранения).

Если ничего не изменилось, PInvoke ограничен «утвержденными» методами Win32 API.

См. эту ссылку для некоторых альтернатив общим потребностям Win32 API: http://msdn.microsoft.com/en-us/library/windows/apps/hh464945.aspx

См. эту ссылку для утвержденных Win32/COM API: http://msdn.microsoft.com/en-us/library/windows/apps/br205762.aspx

Трудно сказать, будет ли «хорошая» архитектура легкой для переноса, не зная, что находится в коде этой архитектуры. В моем служебном фреймворке у меня были вещи, которые очень легко переносились (или, по крайней мере, были простыми), и вещи, которые были полной промывкой, требующей много переписывания (например, потеря System.Data - больное место для меня). Есть вещи, которые можно хорошо спроектировать, но когда вы уберете нижележащий код из фреймворка или API, он был написан с ним, и его придется переписывать.

person b.pell    schedule 25.07.2012
comment
Вау, звучит как гигантский кусок бесполезного дерьма. - person Jonathon Reinhart; 25.07.2012
comment
Я бы сказал, что он еще не созрел (например, у него еще нет первой производственной версии, и у него есть путь). Да, вы теряете возможности, некоторые из соображений безопасности, но в качестве компромисса вы получаете возможность доставлять свое приложение через легальную торговую площадку, которую можно монетизировать (а не через веб-страницу низкого качества, которая существовала годами). Я вижу выгоду в том, что они пытаются сделать, но, как вы сказали, я также иногда чувствую разочарование (крайнее) из-за необходимости переоснащать вещи, которые, как мне кажется, мне не нужно переделывать. - person b.pell; 25.07.2012

У меня была та же проблема: проект для приложения Metro не загружал dll, созданный с помощью framework .4. Поменял фреймворк с 4 на 3.5 для dll и теперь Метро проект их видит.

person Cate    schedule 26.04.2013