Лучшая установка для разработки Linux из Windows? [закрытый]

По умолчанию Json.Net будет обрабатывать любой класс, который реализует IEnumerable как массив. Вы можете переопределить это поведение, украсив класс атрибутом [JsonObject], но тогда только свойства объекта будут сериализованы, как вы видели. Сам список не будет сериализован, потому что он не открывается через общедоступный объект (скорее, он отображается через метод GetEnumerator()).

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

Предполагая, что ваш класс PagedResult<T> выглядит примерно так:

class PagedResult<T> : List<T>
{
    public int PageSize { get; set; }
    public int PageIndex { get; set; }
    public int TotalItems { get; set; }
    public int TotalPages { get; set; }
}

Вы можете сделать для него такой конвертер:

class PagedResultConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(PagedResult<T>));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        PagedResult<T> result = (PagedResult<T>)value;
        JObject jo = new JObject();
        jo.Add("PageSize", result.PageSize);
        jo.Add("PageIndex", result.PageIndex);
        jo.Add("TotalItems", result.TotalItems);
        jo.Add("TotalPages", result.TotalPages);
        jo.Add("Items", JArray.FromObject(result.ToArray(), serializer));
        jo.WriteTo(writer);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

(Обратите внимание также, что атрибуты [JsonObject] и [JsonProperty] не требуются при таком подходе, поскольку знание того, что сериализовать, инкапсулируется в класс преобразователя.)

Здесь представляет собой демонстрацию, показывающую преобразователь в действии:

class Program
{
    static void Main(string[] args)
    {
        PagedResult<string> result = new PagedResult<string> { "foo", "bar", "baz" };
        result.PageIndex = 0;
        result.PageSize = 10;
        result.TotalItems = 3;
        result.TotalPages = 1;

        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.Converters.Add(new PagedResultConverter<string>());
        settings.Formatting = Formatting.Indented;

        string json = JsonConvert.SerializeObject(result, settings);
        Console.WriteLine(json);
    }
}

Выход:

{
  "PageSize": 10,
  "PageIndex": 0,
  "TotalItems": 3,
  "TotalPages": 1,
  "Items": [
    "foo",
    "bar",
    "baz"
  ]
}
27
задан Josh Kelley 8 June 2009 в 14:23
поделиться

12 ответов

Либо Виртуальная машина с разработанной на Linux средой разработки, либо локальная копия некоторой независимой от набора инструментов IDE (например, Notepad ++, с тестированием, выполненным с помощью MinGW или CygWin, насколько это возможно), или просто пишите в Notepad ++ и сохраняйте загружаю на свой компьютер и тестирую там, что я и делаю.

3
ответ дан Lightness Races in Orbit 14 October 2019 в 12:48
поделиться

Вы можете попробовать использовать любой из дистрибутивов Linux для Windows, даже в Windows-Store есть Ubuntu, SUSE и т. Д. Для Windows, и это может помочь сократить ваши усилия по написанию кода. Эти дистрибутивы Linux содержат оболочку Linux, ядро ​​и т. Д., Поэтому вам не понадобится система Linux каждый раз при отладке или тестировании кода.

Вы также можете использовать Visual Studio Code, который намного лучше и быстрее по сравнению с Eclipse и даже поддерживается в Linux и Mac.

Проверьте этот на наличие дистрибутива Ubuntu в Windows Store.

Linux дистрибутивы также могут быть загружены из других источников, но Microsoft настоятельно рекомендует использовать дистрибутив из Windows-Store.

0
ответ дан Avi 14 October 2019 в 12:48
поделиться

Используйте Linux! У меня обычно есть другая проблема: разработка win под linux. Нет никаких оснований этого не делать: у меня есть победитель, работающий на виртуальном боксе почти все время. Linux поставляется с большим количеством инструментов разработки.

Проблема в том, что:

это графический интерфейс? - Если нет, у вас не будет проблем, как только ваш код STD / Portable. (X позволяет вам и простые вещи, но для хорошего приложения сегодня вам нужно немного больше.) - Если да, то у вас будет много проблем, когда вы на самом деле перенесете код на работающую платформу.

Должен ли он быть переносимым / заменяемым между Linux и Windows? - если нет, просто разработайте на родной ОС. Намного меньше боли. У вас есть Eclipse для обеих платформ. Даже если вы подумаете перенести код на более позднюю стадию, просто сначала выполните работу для него.

Я разработал несколько графических приложений под Linux, которые сейчас используются только под Windows. Мой рецепт: GTK / GNOME. Я сделал это с Cygwin и Mingw. Но я думаю, что в Qt тоже есть такая же полезная среда. Мой код вышел на победу без изменений! [хорошо ... пару касаний путей к файлам ... но это была ошибка ..]

Нет способа развиваться под win и надеяться работать на linux, если вы не уверены, что не используете какой-либо выиграть libs. То есть: в графическом приложении практически нет шансов. Или много проверок ... Или вы не будете использовать выигрышные средства. Забудьте Visual Studio.

Проверьте, действительно, вино и страницы winehq.

Если проблема не в другом, например, в использовании средств совместного использования команды, или SVN, или чего-то еще. Что не является проблемой разработки кода, но немного больше с организационной стороны.

Итог: портировать бесплатный код на win проще, чем проприетарный код на свободном рынке.

бис F

-1
ответ дан Fabio 14 October 2019 в 12:48
поделиться

Вы можете попробовать другие X-серверы в Windows, такие как xwin32 и hummingbird. Обратите внимание, что это коммерческие реализации.

Другим решением является установка сервера виртуальных машин на вашем компьютере с Windows и установка Linux на виртуальной машине. Варианты включают VMware (не бесплатно) и Microsoft Virtual PC (бесплатная загрузка). VMware намного лучше, чем VirtualPC (64-битная поддержка, больше стимулов для поддержки клиентских ОС Linux и т. Д.). Там также может

3
ответ дан Mr Fooz 14 October 2019 в 12:48
поделиться

Для разработки я обычно использую виртуальную машину Linux на своей Windows-машине. Вероятно, он отправит пользователей Linux, бегущих в ванную, чтобы помыть руки, но я делаю всю свою разработку в Visual Studio, и у меня есть собственный плагин Visual Studio, который вызывает G ++ через виртуальную машину и передает вывод в окно вывода VS , С помощью быстрой смены поля со списком я могу собрать и протестировать Windows или Linux.

7
ответ дан Gerald 14 October 2019 в 12:48
поделиться

Наилучший подход, который я нашел, заключается в следующем:

  1. сохранить ваш код переносимым
  2. для разработки на вашем рабочем столе
  3. проверять любые зависимости ОС (насколько это возможно, сведите к минимуму)
  4. регулярно размещайте на своей цели, тестируйте и там отладка

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

Кроме этого, подумайте об отказе от IDE и разработке и отладке через SSH, редактор терминала (например, vi, pico, ee, emacs), make / ant и gdb.

Лучший подход для вас будет зависеть от вашего языка программирования и типа приложения, которое вы разрабатываете. Если вы работаете с приложениями с графическим интерфейсом, то использование X может быть единственным подходящим подходом. Если вы занимаетесь разработкой бэк-офиса / демона, то подход SSH и терминалов, вероятно, сработает, хотя вы, вероятно, захотите по-настоящему освоиться с vi или emacs.

РЕДАКТИРОВАТЬ : только что заметил, что вы занимаетесь разработкой на C / C ++. Подумайте об использовании кроссплатформенного фреймворка, если вы этого еще не сделали. Использование чего-то вроде Qt , APR , ACE или Poco должно позволить изначально разрабатываться под Windows с шагом развертывания / отладки. в вашу среду Linux.

9
ответ дан D.Shawley 14 October 2019 в 12:48
поделиться

Я нахожу coLinux чрезвычайно полезным при разработке под Windows для Linux, это в основном система linux, работающая параллельно вашей операционной системе Windows (то есть как служба), и ее можно настроить так, чтобы она просто отображалась в вашей локальной сети. в основном, как виртуальная машина. Кроме того, он гораздо более полнофункциональный, чем CygWin, и его производительность действительно замечательна - я могу легко запускать нетривиальные вещи в coLinux и по-прежнему запускать симуляторы со скоростью 90+ кадров в секунду.

Кроме того, coLinux можно легко настроить для запуска X11 и оконных менеджеров, таких как gnome / KDE, так что вы можете, например, использовать что-то вроде vnc для доступа к вашему рабочему столу linux.

Cooperative Linux - это первый работающий бесплатный метод с открытым исходным кодом для оптимальной работы Linux под Microsoft Windows. В более общем смысле, Cooperative Linux (сокращенное название coLinux) - это порт ядра Linux, который позволяет ему работать совместно с другой операционной системой на одной машине. Например, он позволяет свободно запускать Linux в Windows 2000 / XP без использования коммерческого программного обеспечения для виртуализации ПК, такого как VMware, гораздо более оптимальным способом, чем использование любого программного обеспечения для виртуализации ПК общего назначения.

colinux screenshot
(источник: colinux.org )

5
ответ дан Glorfindel 14 October 2019 в 12:48
поделиться

Простая в настройке опция - запуск Eclipse в Windows, но развертывание кода через общий ресурс Samba на компьютере с Linux (который вы можете подключить как другой диск) (или SSH / SCP, если SMB не вариант), и затем запустите его через консоль SSH.

Другой простой в настройке вариант - просто разрабатывать в Linux с помощью freenx или аналогичного инструмента вместо полноценного сеанса X, проверьте этот ответ: https://serverfault.com/questions / 11367 / remote-desktopping-from-windows-to-linux / 11372 # 11372

Другие опции (виртуализация, Linux работает внутри Windows, Cygwin) действительно действительны, но имеют свои недостатки, такие как более требовательная к машине, сложная в настройке или недостаточно эквивалентная реальной среде Linux, но вполне может стоить того, если у вас есть машина и сценарий оправдывает их использование.

Выполнение всего на стороне Linux всегда будет иметь некоторые недостатки, если ваша машина работает под управлением Windows.

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

7
ответ дан Community 14 October 2019 в 12:48
поделиться

Параметры для Linux в Windows:

Только инструменты

Учитывая, что вы используете Eclipse, я предполагаю, что вам нужна полная IDE, но если вы можете обойтись только инструменты GNU / Linux, есть несколько вариантов.

  • cygwin предоставляет вам оболочку bash с множеством инструментов, включая сервер X11. Это существует уже некоторое время и является зрелым.
  • msys - это меньшая и легкая альтернатива cygwin.
  • Утилиты GNU для Win32 - еще одна облегченная альтернатива. Это собственные версии инструментов, в отличие от cygwin, который требует, чтобы библиотека cygwin подделывала свои инструменты, думая, что они работают в Linux.

Linux в процессе Windows

Есть несколько пакетов, которые будут запускать Linux как процесс Windows, без моделирования всего ПК, как это делает виртуализация. Они используют Cooperative Linux , также известный как coLinux, который ограничен 32-битными системами. У них нет накладных расходов на виртуализацию, и они запускаются быстрее, поскольку вы не загружаете виртуальный ПК. Это немного больше экспериментальной стороны и может быть не такой стабильной, как некоторые варианты виртуализации.

Virtualization

Программное обеспечение виртуализации позволяет загружать другую ОС на виртуальном ПК , тот, который использует оборудование совместно с ОС хоста. Это довольно проверенная практика. Здесь есть удобные варианты для создания снимков вашего виртуального ПК в определенном состоянии, приостановки / возобновления работы виртуального ПК и т. Д. Приятно иметь возможность поэкспериментировать с виртуальным ПК, добавить несколько пакетов, затем вернуться к предыдущему снимку и "начать с чистого листа".

В моем случае ...

Похоже, ваша среда имеет другие характеристики производительности, но вот моя ситуация: я начал с Eclipse на моем ноутбуке с Windows (выполняя Rails development), нашел это вялым и переключился на использование putty для ssh в быстром Linux. Я занимаюсь редактированием через emacs, работающий на сервере Linux, отображаемый в Windows с помощью Xming. Или я использую собственный emacs в Windows, редактируя файлы, доступные через NFS. Последнее работает медленнее в моей среде из-за вялых сохранений.

При работе из дома я отказываюсь от X, потому что он слишком медленный с удаленными клиентами, и просто запускаю emacs -nw в окне замазки. Затем я использую GNU screen , чтобы у меня было несколько «окон»,

27
ответ дан 28 November 2019 в 02:36
поделиться

Вы можете посмотреть, как настроить svn-сервер в Linux, а затем использовать что-то вроде TeamCity для сборки при фиксации. Вы можете написать свой код локально и сделать коммит, когда захотите, чтобы он был скомпилирован.

1
ответ дан 28 November 2019 в 02:36
поделиться

Cygwin может оказаться полезным.

4
ответ дан 28 November 2019 в 02:36
поделиться

Я сделал то, что вы хотите, по той же причине: полный контроль над выводом (у вас проблемы со шрифтом ваше текущее решение) и гораздо более медленный компьютер с Windows, чем удаленный модуль разработки Linux.

Большинство ответов неверны: наличие «среды разработки Linux» - это не просто «наличие IDE». Все возможности Un * x всегда под рукой.

Это локальный или удаленный Linux-сервер? проблемы с полосой пропускания? Потому что в ЛВС, даже в старой ЛВС со скоростью 100 Мбит / с, слетает FreeNX . Какова нагрузка на этот Linux-сервер?

Установите бесплатный FreeNX в системе Linux, установите бесплатный клиент FreeNX на машину Windows и бинго, ваша среда разработки Linux у вас под рукой.

FreeNX намного более эффективен, чем VNC, сейчас ночной день (VNC на самом деле очень плох с точки зрения производительности, даже по сравнению с удаленным рабочим столом Windows ... Но FreeNX летает).

Что касается скорости, то давным-давно я настроил свою основную рабочую станцию ​​Linux (в те времена это был Pentium 4/2 ГБ памяти), на которой я постоянно разрабатывал с помощью IntelliJ IDEA (другая IDE), чтобы обслуживать полный сеанс X (в комплекте с оконным менеджером и т. д.), который другой разработчик отображал удаленно, чтобы ... запустить другой экземпляр IntelliJ (и получить доступ ко всем тонкостям Un * x). Это было в локальной сети со скоростью 100 Мбит / с, и это выглядело так, как если бы приложение было локальным для другого разработчика.

В любом случае, на сегодняшнем оборудовании я не могу представить, как это может не работать: теперь у меня здесь Core 2 Duo / 4 ГБ оперативной памяти в качестве основного рабочего стола и гигабитная локальная сеть.

Такая установка отлично работала 4 года назад, она будет работать отлично сегодня.

Теперь, если вы скажете мне, что у вас проблемы с пропускной способностью, или что Linux-машина, на которой установлена ​​ваша учетная запись, сильно загружена или что она не в локальной сети, тогда все может быть иначе ...

Как младший Разработчики, которым нужна мощная система Un * x, делают это в компании, которую я сейчас консультирую (у которой есть только рабочие столы Windows)? Большинство из них приносят свой блестящий MacBook Pro и используют его для разработки;)

4
ответ дан 28 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

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