Как запустить wpf на linux

Обновлено: 05.07.2024

Это уже работает? У кого-нибудь из вас были какие-нибудь опыты с ним?

Правка: я знаю о лунном свете. Но я хочу автономное приложение WPF. И из- за Лунного Света я надеюсь, что WPF на Linux станет правдой.

Я полагаю, что маленький значок в строке заголовка на изображении ниже добавляется с помощью элемента управления лентой? Я гуглил в последнее время, и мне не очень-то помогли. Есть библиотека управления лентой WPF от Microsoft, но та же самая, которая ничего не устанавливает в строке заголовка. Я.

Есть ли способ привязать команду к Ctrl+MWheelUp/Down ? Вы знаете, что в браузере вы можете сделать то же самое, чтобы увеличить/уменьшить размер шрифта? Я хочу повторить этот эффект в WPF. Возможно? Я смотрел на InputBinding > MouseBindings и MouseAction , похоже, не поддерживает прокрутки мыши.

Вам больше повезет работать с Лунным светом, который нацелен на Silverlight API, который является подмножеством полного WPF.

правка: Конечно, Silverlight не является "intended" для рабочего стола, но нет никаких причин, по которым вы не можете встроить движок silverlight в свое приложение. Это уже делалось раньше, например, для Mac NY Times Reader

Обновление : Поскольку люди продолжают поддерживать это, я хочу отметить, что это давно устарело. Mono был приобретен MS год назад, и их позиция в отношении открытого исходного кода изменилась, поэтому считайте этот пост устаревшим. (Такой же устаревший, как и сам фреймворк WPF, хех).

На данный момент у проекта Mono нет планов по реализации Windows Презентация Фонда APIs в рамках проекта.

Moonlight-это реализация silverlight, которая представляет собой браузерную технологию flash, основанную на подмножестве WPF.

Существует библиотека под названием Silverform SDK , которая направлена на обеспечение кросс-платформенной реализации WPF и Silverlight.

Библиотека реализована в управляемом коде и в настоящее время работает с OpenTK и Unity3D в качестве бэкэндов рендеринга. Основные функциональные возможности, такие как привязка, компоновка, основные элементы управления и примитивы, уже реализованы (проверьте демо-версии Unity web player здесь ). Изначально он был ориентирован на рендеринг Unity3d, в то время как поддержка автономных приложений Mono будет добавлена в качестве отдельной сборки в будущем.

Отказ от ответственности: Я являюсь одним из разработчиков библиотеки.

Я понимаю, что Moonlight больше не поддерживается Xamarin, но у меня есть приложение WPF, написанное на Windows, которое я хотел бы портировать на Linux. Я хочу избежать переписывания кода UI. Я наткнулся на проект Xamarin под названием MoonlightDesktop (.

Если вы проверите известные ошибки этой ссылки (также включает в себя шаги, необходимые для установки .NET на Ubuntu)или это , вы можете обнаружить, что на данный момент некоторые(возможно, глючные) версии WPF работают на Wine. На данный момент я не нашел никакого определенного теста, но стоит попробовать запустить WPF "Hello world".

Я запустил latest IlSpy на latest Wine для Ubuntu 16.04. С 32-разрядной версией dotnet45 и corefonts , установленной через winetricks с совместимостью windows 7.

За это время никаких сбоев, и все работает нормально. Шрифты выглядят очень хорошо.

Я скачал последнюю версию portable SharpDevelop(сборка с использованием WPF) без каких-либо дополнительных. Все началось. Не удалось создать проект WPF. Создано WinForms. Открыв несколько файлов cs и обнаружив некоторые сбои, попытался набрать - и он разбился.

IlSpy via Wine on Ubuntu

Я последовал шагам и получил последнюю версию ILSpy.exe, работающую на Ubuntu 14.4.

enter image description here

Следующие пункты, которые следует отметить:

вино заявило, что dotnet40 не поддерживается 64-битной конфигурацией, измененной на 32-битную

шрифты уродливые, но читабельные

базовый функционал работает нормально - я вижу декомпилированный код, что достаточно хорошо для некоторой разработки, но Просмотр - > Поиск и Просмотр - > Параметры -> Сбой отображения.

WPF на Linux возможно. Но нужен какой - то способ решения проблем.

Olive не поддерживается, его следует рассматривать как экспериментальное программное обеспечение, и поскольку он реализует смещение API, нет никаких гарантий относительно стабильности API.

Я сомневаюсь, что кто-то использовал бы его в реальном проекте.

Да, это возможно с помощью NoesisGUI многоплатформенной реализации XAML в реальном времени. Есть несколько игр, уже выпущенных с использованием этой технологии в Linux, например VoidExpanse

Раскрытие информации : Я являюсь одним из разработчиков этого продукта.

Я слышал подкаст с интервью Мигеля де икасы (ведущий mono), возможно, несколько недель назад, так что это было бы, возможно, в середине декабря 2008 года, и он сказал, что у них пока нет поддержки WPF.

Теоретически, урезанная версия WPF может быть скомпилирована против WinPR или LibWine для запуска на Linux.

В настоящее время такой установки нет, поэтому кто-то должен был бы ее сделать. Надеюсь, это скоро изменится.

Что касается работы против или в полной винной среде, то я думаю, что это серьезно перебор и приведет к слишком большому раздуванию, чтобы стоило заставлять работать очень небольшое количество дополнительных программ.

Похожие вопросы:

Мне нужно некоторое руководство от всех экспертов Linux там. Я хотел бы сделать следующее. Пожалуйста, скажите мне, если это возможно. Если это не так, Пожалуйста, скажите мне, почему. Я хотел бы.

Можно ли иметь проект, содержащий как Winforms, так и WPF? Скажем, проект WinForm, который преобразуется шаг за шагом(форма за формой) в WPF, будет ли возможно иметь Winform, открывающийся на.

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

Есть ли способ привязать команду к Ctrl+MWheelUp/Down ? Вы знаете, что в браузере вы можете сделать то же самое, чтобы увеличить/уменьшить размер шрифта? Я хочу повторить этот эффект в WPF.

Я понимаю, что Moonlight больше не поддерживается Xamarin, но у меня есть приложение WPF, написанное на Windows, которое я хотел бы портировать на Linux. Я хочу избежать переписывания кода UI. Я.

Возможно ли привязаться к методу в WPF? Если ответ да, пожалуйста, приведите пример для демонстрации. Спасибо.

Я пытаюсь найти решение для CI, которое можно запустить на сервере Linux, который в настоящее время содержит репо SVN. Поскольку многие из приложений, которые мы создаем, являются настольными.

I have worked on several large WPF applications that took many years to create. When we started development, our users only used Windows, which made WPF a natural choice. WPF provides a modern UI and workflow that ran on all versions of Windows. Today, our customers increasingly want to use our applications on Linux, so we have been looking for a way to achieve this at an investment level that makes sense given the current size of the user base. With this shift, we are also looking to maximize the investments we have already made with our WPF applications. To move to Linux, we considered several options:

After some evaluation, we were not happy with any of these solutions. They were either cost prohibitive or would have resulted in a less desirable application. Given the size of the Linux customer base, we needed a solution that is initially low cost, and provided a model that could evolve to support tailoring features to each platform as the user base grows. We found the solution to these problems with Wine.

Wine is often used to enable users to run games on Linux. In order to support gaming, the Wine team invested in providing a full-featured implementation of DirectX. This is great for WPF, since it uses DirectX for rendering, and, from the rendering perspective, is a lot like a DirectX game.

Wine is typically used to run applications out of the box. This is a high bar, since any missing API or behavioral difference between Wine and Windows can result in an unusable app. If you are willing to thoroughly test and make necessary application changes, you can be successful running your WPF apps on Linux. I’ve had great success getting several applications, including some very large WPF apps, running on Linux with minimal changes.

Getting started

It’s much easier to debug and fix issues on Windows than on Linux, so make sure your application is working well on Windows before you try it on Linux.

Install Wine

Follow the instructions on the Wine Installation page to install a Wine package that is compatible with your Linux distribution. I’ve had success installing the development build available from WineHQ directly. Once Wine is installed, you need to set it up. Running winecfg is an easy way to get Wine to setup the Wine prefix (configuration) directory.



Once wineconfig is running, there should be a .wine directory in your home directory:


Nothing needs to be changed in WineConfig so it can be closed.


Copy the entire dotnet folder from the Program Files directory on Windows:

to the Program Files directory in the Wine configuration location:


Install / copy your application to Linux

Applications that can run from the build output directory can be copied from Windows to anywhere on your Linux machine. I usually copy the application into my home directory for testing. Wine also supports setting registry keys or environment variables. If your required setup has more complex requirements, you may have more difficulty, but Wine supports a surprising number of Windows features.

Make sure fonts are available

When testing out various applications, I often experienced odd crashes when an appropriate font was not available. For testing purposes, the easiest way to get necessary fonts is with Winetricks. Install and run Winetricks. From there, you can install fonts available from a variety of sources.

Run your application under Wine

Once your app is copied to the Linux machine, you can run it under Wine:

Here is a screen capture Modern WPF example application running on Linux:

This application runs unmodified on Linux.

Note: I have only tested 64-bit applications.

Calling native code

The easiest way I have found to do this is to download and build the Wine source and then follow the patterns of the built-in DLLs. The Wine Developer Hints page has information on how to implement a new DLL. You can follow these instructions to create a DLL for your application.

Lets say you have a .so (examplelibrary.so) that has a method like this:

that you want to call into. To call into it, you need to make an equivalent DLL version (winExampleLibrary) that you can then pInvoke to:

Then pInvoke normally:

What to do if your application does not work

To use dnSpy run it under wine just like any other application:

In addition to using dnSpy, logging is often a convenient way to debug issues that you run into.

Console.WriteLine

Use Console.WriteLine to log any information you may need to debug issues. I highly recommend adding generous amounts of logging, asserts, and verification to your app. When catching unexpected exceptions, be sure to log the exception and call stack from the exception so you can easily determine the location of the error.

I recommend installing general exception handlers you can you catch unhandled exceptions and log them as well.

Dispatcher has an UnhandledException event that can be registered and used to log any unhandled exceptions from the dispatcher.

AppDomain also has an UnhandledException event that can be used to log any unhandled exceptions.

Wine Tracing

Wine is good at letting you know when your application calls unimplemented or partially implemented functionality. These messages can greatly aid in tracking down issues.

In addition to the standard tracing of Wine, you can configure even more event logging, including logging every call into Wine, to help you track down issues. More information about debug logging is available on Wine HQ’s Developer Guide

The Wine Debugging Hints may also provide some insights.

Issues I ran into

Rendering issues with different video cards

I have experienced render issues depending on which manufacturer of video card I am using. NVIDIA does the best with only minor render issues. AMD does a decent job. Intel is basically unusable. If you experience render issues (artifacts, clipping issues, …) you will likely have better luck if you switch to software rendering. You can do this by setting LIBGL_ALWAYS_SOFTWARE to 1.

With the applications I have tested using software rendering does not impact performance of the UI much at all, but it may increase CPU usage.

Other issues

I ran into several other issues, like culture enumeration and file system security APIs crashing. These were all easily worked around in my applications, so I didn’t investigate them further.

Will WPF apps run on other OSes?

WPF runs on DirectX 9, so any build of Wine with reasonable DirectX support should be able to run a WPF app. I have only tried Linux.

Whats Next?

When you run a WPF application on Linux as documented here, you end up with an application that is something like this:


This is a pretty good place to be. The vast majority of code is shared between Windows and Linux. The application runs as a Linux process, integrates well with desktop environments, and has access to the file system and many OS services. However, this model does have challenges. Calling native code requires special work, and not having a debugger can make finding and fixing issues difficult.


To do this, WPF needs to be updated to compile against WineLib. In theory, this should not be too difficult. Hopefully, I will have time in the near future to work on this.

Пример 1

Для начала создадим и запустим консольное приложение Hello World (я буду использовать PowerShell для Windows, но в Bash для macOS или Linux все делается аналогично).

Команда dotnet new делает то же самое, что элемент меню File – New Project в Visual Studio. С её помощью можно создавать проекты различных типов. Используйте команду dotnet new , чтобы вывести список предустановленных шаблонов.

Давайте переместим часть логики в библиотеку классов. Для этого в дополнение к проекту hello создадим проект библиотеки классов.

Переименуем файл Class1.cs в HelloWorld.cs .

Чтобы использовать класс HelloWorld , нужно добавить в приложение hello ссылку на библиотеку, в которой содержится логика. Для этого можно изменить файл проекта или воспользоваться командой dotnet add reference .

Теперь изменим файл Program.cs так, чтобы в нем использовался класс HelloWorld .

Обновление файла Program.cs для дальнейшего использования класса HelloWorld:

Чтобы собрать и запустить приложение, введите команду dotnet run .

В командной строке также можно создавать тесты. Этот CLI поддерживает MSTest , а также популярную платформу xUnit . Давайте для примера воспользуемся xUnit.

Чтобы добавить тест, измените содержимое файла UnitTest1.cs , как показано ниже.

Добавление теста в файл UnitTest1.cs:

Теперь можно запустить тесты с помощью команды dotnet test .

Пример 2

Чтобы запустить тестовый веб-сервер, вновь введите команду dotnet run .

Откройте в браузере URL-адрес, который был выведен в консоли (это должен быть адрес localhost:5000).

Сейчас структура вашего проекта должна соответствовать вот такой структуре.

Структура созданного проекта:

Чтобы упростить редактирование файлов в Visual Studio, создадим файл решения *.SIN и добавим в него все проекты.

BCL — это набор базовых API, не зависящих от инфраструктур пользовательского интерфейса и моделей приложений. В него входят простые типы, файловый ввод-вывод, сетевые API, API сериализации, XML и другое.

Пример 3

Сравним его с файлом проекта консольного приложения hello.

Пример 4

Эта библиотека поддерживает дополнительные типы коллекций, которых нет в BCL. Один из них — тип Bag , не гарантирующий какого-либо порядка элементов. Изменим наше приложение hello так, чтобы в нем использовался этот тип.

Пример приложения с использованием PowerCollections:

Если вы запустите программу, то увидите следующее:

Компилятор выкинул warning но программа отработала!

Если вы снова запустите приложение, предупреждения уже не будет. Однако, если вы установите другой пакет, в котором используется режим совместимости, появятся новые предупреждения. При необходимости их тоже можно будет отключить.

Заключение

теперь я слышал о проекте Olive в Mono. Я не смог найти какого-то бета.

уже работает? Кто-нибудь из вас имел с ним опыт?

Edit: я знаю о лунном свете. Но я хочу автономное приложение WPF. И из-за Moonlight я надеюсь, что WPF на Linux будет сбыться.

вам больше повезет работать с Moonlight, который нацелен на Silverlight API, который является подмножеством полного WPF.

edit: конечно, Silverlight не "предназначен" для рабочего стола, но нет причин, по которым вы не можете встроить движок silverlight в свое приложение. Это было сделано раньше, например,Mac NY Times Reader

с момента публикации этого Microsoft расширила свой пакт до любой, кто реализует стандарты ECMA 334 & 335.

на данный момент проект Mono делает нет планов по реализации Windows API Presentation Foundation as часть проекта.

Moonlight-это реализация silverlight, которая представляет собой браузерную флеш-технологию, основанную на подмножестве WPF.

есть библиотека под названием Silverform СДК это направлено на обеспечение кросс-платформенной реализации WPF и Silverlight.

библиотека реализована в управляемом коде и в настоящее время работает с OpenTK и Unity3D в качестве бэкэндов рендеринга. Основные функции, такие как привязка, макет, основные элементы управления и примитивы, уже реализованы (проверьте Unity web player demos здесь). Первоначально он был ориентирован на рендеринг Unity3d, в то время как поддержка автономного Mono приложения будут добавлены в качестве отдельной сборки в будущем.

отказ от ответственности: я один из разработчиков библиотеки.

если вы проверяете известные ошибки этой ссылке(также включает шаги, необходимые для установки .NET на Ubuntu) или этой вы можете обнаружить, что некоторые(может быть ошибка) версия WPF работает на вино, как сейчас. На данный момент я не нашел определенного теста, но стоит попробовать запустить WPF "Hello world".

я запустил последнюю IlSpy на последний Wine на Ubuntu 16.04. С 32-битной версией dotnet45 и corefonts установлен через winetricks с совместимости с Windows 7.

за это время никаких сбоев и все работает нормально. Шрифты выглядят очень хорошо.

Я загрузил последнюю портативную SharpDevelop (сборка с использованием WPF) без дополнительных. Она начиналась. Не удалось создать проект WPF. Созданные Приложения WinForms. После открытия некоторых файлов cs и подтверждения некоторых глюков, попытался ввести - и это разбитый.

IlSpy via Wine on Ubuntu

я последовал шагам и получил последний ILSpy.exe работает на Ubuntu 14.4.

enter image description here

следующие пункты, чтобы отметить:

вино заявило, что dotnet40 не поддерживается конфигурацией 64, измененной на 32 бит

шрифты уродливые, но читаемые

основные функциональные работы отлично - я вижу декомпилированные код-который достаточно хорош для некоторой разработки, но View -> Search and View -> Options -> Display crash.

WPF на Linux возможно. Но нужно как-то решать вопросы.

Olive не поддерживается, должно быть рассматривается как экспериментальное программное обеспечение, и поскольку он реализует shifting API нет никаких гарантий о стабильности API.

Я сомневаюсь, что кто-то будет использовать его в реальном проекте.

Да, это возможно с помощью NoesisGUI многоплатформенная реализация XAML в реальном времени. Есть несколько игр, уже выпущенных по этой технологии в Linux, как VoidExpanse

разоблачение: Я один из разработчиков этого продукта.

Я слышал подкаст интервью Мигеля де Икаса (ведущий mono), возможно, несколько недель назад, так что это было бы, возможно, в середине декабря 2008 года, и он сказал, что у них пока нет поддержки WPF.

Читайте также: