Задать вопрос
Ответы пользователя по тегу .NET
  • Что лучше использовать для интернет магазина asp net core mvc или web api?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Лучше для чего именно? По каким именно критериям? В целом же - то, что знаете или хотите изучить.
    Ответ написан
    Комментировать
  • Ошибки в программе на .Net?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Можно дизассемблировать, провести дебаг и пересобрать. Если приложение обфусцировано - то это займет больше времени и будет сложнее. Судя по логу - там ошибка в параметрах конструктора при создании изображения. Предполагаю, что ошибка у вас воспроизводится при каких-то определённых параметрах задаваемых в приложении.
    Код конструктора, в котором происходит ошибка (примерно, ибо там может быть код другой версии, а искать сейчас конкретную версию нет особого смысла):
            /// 
            ///  
            ///    
            ///       Initializes a new instance of the Bitmap class with the specified 
            ///       size and format.
            ///    
            /// 
            public Bitmap(int width, int height, PixelFormat format) { 
                IntPtr bitmap = IntPtr.Zero;
     
                int status = SafeNativeMethods.Gdip.GdipCreateBitmapFromScan0(width, height, 0, (int) format, NativeMethods.NullHandleRef, out bitmap); 
    
                if (status != SafeNativeMethods.Gdip.Ok) 
                    throw SafeNativeMethods.Gdip.StatusException(status);
    
                SetNativeImage(bitmap);
            } 
    
            ///  
            ///  
            ///    Initializes a new instance of the
            ///  
            /// class with the specified size.
            /// 
            public Bitmap(int width, int height) : this(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb) {
            }

    www.dotnetframework.org/default.aspx/DotNET/DotNET...
    Ответ написан
    6 комментариев
  • Есть в графическом виде дерево иерархии классов .net?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Пример для русалки:
    namespace ConsoleAppTest
    {
        internal static class Program
        {
            #region Public Methods
    
            public static IEnumerable<Type> GetInheritanceHierarchy(this Type type)
            {
                for (var current = type; current != null; current = current.BaseType)
                {
                    yield return current;
                }
            }
    
            #endregion Public Methods
    
            #region Private Methods
    
            private static void Main(string[] args)
            {
                IEnumerable<Type>? nsTypes = AppDomain.CurrentDomain.GetAssemblies()
                           .SelectMany(t => t.GetTypes())
                           .Where(t => t.IsClass);
    
                uint idIndex = 0;
                Dictionary<Type, uint> map = [];
                List<List<Type>> hierarchy = [];
    
                foreach (Type type in nsTypes)
                {
                    IEnumerable<Type> iTypes = type.GetInheritanceHierarchy().Reverse();
                    if (iTypes is not null && iTypes.Any())
                    {
                        hierarchy.Add(iTypes.ToList());
                    }
                    else
                    {
                        hierarchy.Add([type]);
                    }
                }
    
                // Process hierarchy first to get nodes id's
                string allhierarchy = string.Join(
                    "\n  ",
                    hierarchy.Select(types =>
                        string.Join(
                            " --> ",
                            types.Select(t => $"T{GetTypeId(t)}")
                        )
                    )
                );
    
                // Now process all nodes names
                IEnumerable<string> nodes = map.Select(p => $"T{p.Value}(\"{p.Key}\")");
                string allNodes = string.Join("\n  ", nodes);
    
                // Combine all data to chart
                string mermaidChart = $"flowchart TD\n\n%% Nodes\n  {allNodes}\n\n%% Hierarchy\n  {allhierarchy}";
    
                File.WriteAllText("mermaid chart.txt", mermaidChart);
    
                Console.WriteLine($"Done. Classes processed: {nodes.Count()}");
                Console.ReadKey();
    
                uint GetTypeId(Type type)
                {
                    if (map.TryGetValue(type, out uint id))
                    {
                        return id;
                    }
                    map[type] = idIndex;
                    return idIndex++;
                }
            }
    
            #endregion Private Methods
        }
    }

    Русалка умеет в PNG, SVG и другие форматы.
    Ответ написан
  • Как правильно организовать проект на ASP.NET Core, чтобы минимизировать дубляж кода?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Либо делать декомпозицию и писать общие для всех объектов методы либо взять готовое решение, где уже есть всё нужное или хотя бы основная часть.
    Ответ написан
  • Какие есть способы компиляции проекта WinForms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Только стандартный компилятор МС. Ибо WinForms - это по сути обёртка над древним легаси кодом и попытка сделать удобный визуальный конструктор форм и которая сама по-себе уже стала легаси. А, ну и в проектах WinForms всё равно приходится использовать костыли для тех или иных вещей. Вы думаете кто-то будет делать и поддерживать C# компилятор для дважды древнего легаси проекта МС? Даже если найдётся какой-то другой компилятор - с вероятностью 95-99% вообще любой проект WinForms придётся долго и мучительно пичкать костылями, чтобы оно просто хотя бы собралось. Да и потом еще надо будет заставить это всё не просто работать, а правильно работало. Даже искать решение нет смысла - вероятность проблем практически 100%.
    Ответ написан
    Комментировать
  • Что выбрать для CI/CD проектов на .net?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    • Самое ближайшее и доступное в вашем случае - GitHub Actions
    • Чуть более сложно, но больше гибкости и автономности - GitLab PipeLines (можно даже у себя захостить сервер)
    Ответ написан
    2 комментария
  • Как разделить UI и логику десктоп приложения C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Использовать стандартные паттерны типа MVC и MVVM. Для большинства приложений этого достаточно. Если приложение более сложное, то оно делится на компоненты в виде, опять же, стандартных библиотек и приложения/приложений.
    Ответ написан
    Комментировать
  • Как убрать ненужное пространство между кнопками c++ Windows forms CLI?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Смотрите свойства Margin и Padding у самих контролов и их контейнеров.
    почему писать GUI на C++/CLI не самая лучшая идея?

    Потому что на шарпе c WPF/MAUI проще.
    Ответ написан
    Комментировать
  • Какой дистрибутив Linux выбрать для FullStack .NET Develop?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Любой. Лично мне нравится Debian за свою стабильность и надежность. Еще CentOS тоже нравится, да. Кстати, отказываться от связки венда + студия совсем необязательно, ибо если линукс стоит на машине как хостовая ОСь - то можно поставить виртуалбокс, а в него венду и спокойно пользоваться любимым и привычным инструментом. А в линуксе просто прогонять тестирование, что оно там работает. :D
    Ответ написан
    Комментировать
  • Как параметризировать адрес сервера, к которому обращается десктопное приложение?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    #if DEBUG
            server = "test";
    #else
            server = "prod";
    #endif
    Ответ написан
    Комментировать
  • Почему видно прогрузку приложения?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    WindowsForms использует очень древний и устаревший GDI+ - сегодня его использовать имеет смысл только если нужна поддержка Windows XP (либо еще каких-то окаменелостей). Во всех остальных случая лучше использовать WPF или MAUI - там нет лагов и тормозов. Если же хочется ускорить формы, то ищите по теме "speedup/boostup gdi windowsforms" - там надо добавить несколько дополнительных флагов при создании окна и, ЕМНИМ, включить двойную буферизацию. На SO есть все решения. Но, некоторые тормоза все же будут. Если хочется красиво запустить приложение, то при запуске надо создавать окно в скрытом виде, затем ждать пока инициализируются остальные компоненты и только потом уже показывать само окно. Если нужна производительная сложная анимация - то про формы лучше забыть и сразу перекатываться в WPF/MAUI. В крайнем случае можно создать компонент на WPF и использовать его в формах: я так делал или наоборот, когда надо было использовать древнее легаси WinAPI, но в современной красивой обертке с нужными фичами. На счет интеграции MAUI и форм не подскажу.
    Ответ написан
    Комментировать
  • Корректен ли такой способ обьявления переменной?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    IEnumerable - интерфейс, а List - класс, реализующий данный интерфейс. Любой класс может реализовывать несколько интерфейсов. Правильнее объявлять как есть - т.е. List, а там где, где нужен конкретный интерфейс/класс - просто делать каст. Обычно не требуется, т.к. IDE/компилятор еще стадии написания/компиляции кода проверяет наличие нужного интерфейса в передаваемом объекте. Соответственно, если ваш конструктор просит IEnumerable, но не разрешает List - проверяйте точнее, что именно нужно конструктору, т.к. если все правильно делать - то List он должен принимать.
    Ответ написан
    3 комментария
  • Имеет ли смысл использовать паттерн MVVM в приложении Winforms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Нет, оно там просто не нужно - достаточно просто правильно структурировать приложение. В WF вполне достаточно просто разделить логику приложения и логику самого интерфейса. Нужен нестандартный контрол со своим поведением? Отпочковываем класс от Control и вперед. Логика самого интерфейса вполне нормально живет в самих классах элементов управления (в терминах MVVM это два в одном View + ViewModel). Например, реальный случай из практики: запилил WF приложение по выданному дизайну - его потестили и почти сразу дизайнер нарисовал полностью новый дизайн; ввиду увеличения фишечек, рюшечек и всего остального (а так же тормозов древнего легаси наследия WF, конечно же) - я просто перенес файлы с логикой из WF проекта в WPF проект в модели и запилил новый GUI на WPF.
    Ответ написан
    Комментировать
  • Как сделать картинку размером более 100000 пикселей(png)?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если памяти хватает - создать массив нужного размера и далее его сохранять в нужный формат в файл. Имеет смысл поискать либы для работы с большими файлами. Либо писать самостоятельно. Про GDI вам уже сказали, что он не поддерживает большие файлы - там просто древний легаси код. Если памяти не хватает - работать с пикселями в потоковом режиме или с небольшими блоками, зависит от того, что надо делать с изображением.
    Ответ написан
    Комментировать
  • Зачем надо делегаты?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Например: https://qna.habr.com/q/1201718#answer_2227658
    Вот еще из доки: https://learn.microsoft.com/en-us/dotnet/api/syste... https://learn.microsoft.com/en-us/dotnet/api/syste...
    Еще, например, делегаты нужны для событий, для лямбда функций и многих разных полезных вещей.
    Ответ написан
    Комментировать
  • Не запускается приложение Windows Forms после его сборки. Что делать?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    C 95% вероятностью отсутствующие библиотеки, конфиги, зависимости или сам .Net на другой машине, а в коде приложения нет проверок/обработки ошибок загрузки библиотек/конфигов/зависимостей. Проверить список зависимостей приложение и их присутствие на целевой машине, добавить обработку не обработанных исключений и логирование запуска приложения на разных этапах для понимания в какой момент происходит ошибка/падение.
    Ответ написан
    Комментировать
  • Есть ли готовые решения для рендеринга HTML в десктопном приложении?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Конечно — браузер называется. В WPF есть WebView. Еще есть всякие NWJS и Electron.
    Ответ написан
    Комментировать
  • Как рендерить HTML/CSS в .net/C# для desktop?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    NWJS еще есть.
    Ответ написан
    Комментировать
  • Как хранить текстовые данные в приложении на C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Например:
    class MyClass
    {
        ...
        static class Strings
        {
            public static string str1 = "string 1";
        }
    }

    Или просто вынести в отдельный файл.
    Ответ написан
    Комментировать
  • Как получить все запросы в WebBrowser в Windows Forms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Самый простой способ — сделать обычный прокси для перехватов запросов. Чуть посложнее — использовать готовые библиотеки для перехвата запросов.
    Ответ написан
    Комментировать