Ответы пользователя по тегу C#
  • Как подключить бд к серверу в docker-compose?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Server=localhost

    Чей локалхост? У каждого контейнера он свой. Тогда какой указывать? Оптимально - по имени.
    https://docs.docker.com/compose/networking/
    Reference containers by name, not IP, whenever possible. Otherwise you’ll need to constantly update the IP address you use.

    Port=6002

    Чья туфля порт? Внутри докер-сети (Вы же указали: networks>postgres-network) контейнеры общаются по внутренним портам (рекомендуется).

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

    "Postgres": "Server=localhost; Port=6002; Database=post; User ID=postgres; Password=passwd; Pooling=true"

    "Postgres": "Server=postgres_db; Port=5432; Database=post; User ID=postgres; Password=passwd; Pooling=true"

    docker-compose.yml:
    version: '3.8'
    
    networks:
      postgres-network:
        driver: bridge
    
    services:
      gchain.posts.api:
        image: gchain.posts.api
        build:
          context: .
          dockerfile: GChain.Posts.Api/Dockerfile
        ports:
          - "80:8080"
        networks:
          - postgres-network
        depends_on:
          - postgres_db
    
      postgres_db:
        container_name: postgres_post
        image: postgres:latest
        environment:
          POSTGRES_USER: ${POSTGRES_USER:-postgres}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-passwd}
          POSTGRES_DB: post
        volumes:
          - postgres-data:/var/lib/postgresql/data
        ports:
          - "6002:5432"
        networks:
          - postgres-network
        restart: unless-stopped
    
    volumes:
      postgres-data:
    Ответ написан
    Комментировать
  • Как выводить на консоль ключевые слова особым цветом, отличным от всего остального текста?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вы изменяете цвет консоли внутри делегата с уже сформированной строкой. Как вариант, можно разделить текст на слова и выводить нужные слова с нужным цветом:
    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            string text = "This is the great city of Sevsar, the harbor of humanity";
            string[] keywords = { "great", "harbor" };
    
            HighlightKeywords(text, keywords, ConsoleColor.Red);
            Console.WriteLine();
        }
    
        public static void HighlightKeywords(string text, string[] keywords, ConsoleColor highlightColor)
        {
            string pattern = $@"\b({string.Join("|", keywords)})\b";
            MatchCollection matches = Regex.Matches(text, pattern, RegexOptions.IgnoreCase);
    
            int lastIndex = 0;
            foreach (Match match in matches)
            {
                Console.Write(text.Substring(lastIndex, match.Index - lastIndex));
    
                Console.ForegroundColor = highlightColor;
                Console.Write(match.Value);
                Console.ResetColor();
    
                lastIndex = match.Index + match.Length;
            }
    
            Console.Write(text.Substring(lastIndex));
        }
    }

    КартинкО

    6641ffe274e9d095852691.png
    Ответ написан
    1 комментарий
  • Как правильно собрать wpf проект?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как правильно собрать проект таким образом чтобы у других пользователей не было доступа на исходный код.

    dotnet publish - компиляция проекта в промежуточный язык (IL) с расширением DLL. Относительно простой реверс.

    dotnet publish -r win-x64 -c Release - компиляция проекта в единый экзешник (машинный код) под win64. Относительно, не простой реверс.
    не говорю чтобы проект должен состоит из одного exe файла так как думаю это повлияет на оптимизацию самой приложении.

    Повлияет, в большинстве случаев - приложение становится более производительным.
    Ответ написан
    Комментировать
  • C# Как распаковать все содержимое конкретной папки в .zip архиве в папку на диске?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Часть кода из одного моего проекта, где решается похожа задача (поправить пути и логику при необходимости):
    using System.IO.Compression;
    
    string zipPath = @"path/zip.zip";
    string unZipPath = @"path/unzip-dir";
    string dirNameInZip = "dir-name";
    
    // Проверяем наличие архива
    if (!File.Exists(zipPath))
    {
        throw new FileNotFoundException("Ошибка, архив не найден.", zipPath);
    }
    
    // Создаем выходную директорию, если она не существует
    Directory.CreateDirectory(unZipPath);
    
    // Получаем архив
    using var archive = ZipFile.OpenRead(zipPath);
    
    // Ищем нужную директорию в архиве
    var folder = archive.Entries.FirstOrDefault((e) =>
        e.FullName.StartsWith(dirNameInZip + "/") && e.FullName.Length > dirNameInZip.Length + 1);
    
    if (folder == null)
    {
        throw new DirectoryNotFoundException($"Ошибка, директория '{dirNameInZip}' в архиве не найдена.");
    }
    
    // Извлекаем директорию со всеми данными
    foreach (var entry in archive.Entries.Where((e) => e.FullName.StartsWith(folder.FullName)))
    {
        string relativePath = entry.FullName[(folder.FullName.Length + 1)..];
        string filePath = Path.Combine(unZipPath, relativePath);
    
        // Создание вложенных директорий, если требуется
        string? directoryPath = Path.GetDirectoryName(filePath);
        if (!string.IsNullOrEmpty(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);
        }
    
        // Извлечение файлов с перезаписью
        entry.ExtractToFile(filePath, overwrite: true);
    }
    Ответ написан
    5 комментариев
  • Почему получается подключить Core в Dockerfile?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понял задачу (использовать одну общую либу Core для нескольких проектов), то я бы использовал 2 варианта:
    - Создание NuGet пакета (если Core изменяется не часто), затем подключаем его в любом проекте.
    - Или docker multi-stage builds (если Core изменяется часто).

    Пример docker multi-stage builds с авто сборкой Core lib + Api proj (поправить пути и наименования директорий при необходимости):
    # Build Core lib
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS core-build
    WORKDIR /src
    COPY ["../Core/Core.csproj", "./Core/"]
    RUN dotnet restore "./Core/Core.csproj"
    COPY ["../Core/", "./Core/"]
    RUN dotnet build "./Core/Core.csproj" -c Release -o /app/core
    
    # Build API proj
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS api-build
    WORKDIR /src
    COPY ["Service/API/API.csproj", "./Service/API/"]
    RUN dotnet restore "./Service/API/API.csproj"
    COPY ["Service/API/", "./Service/API/"]
    COPY --from=core-build /app/core /lib
    RUN dotnet build "./Service/API/API.csproj" -c Release -o /app/service
    
    # Create final image
    FROM mcr.microsoft.com/dotnet/aspnet:8.0
    WORKDIR /app
    COPY --from=api-build /app/service .
    ENTRYPOINT ["dotnet", "API.dll"]
    Ответ написан
    1 комментарий
  • Selenium, как найти элемент (поискового запроса)?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    У них поиск реализован во фрейме, соответственно необходимо переключиться на этот фрейм и уже затем взаимодействовать внутри него с элементами. Не знаю как у Вас там на шарпее, но на python так:
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    
    try:
        driver.get('https://dzen.ru/')
    
        iframe = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "iframe.dzen-search-arrow-common__frame"))
        )
    
        driver.switch_to.frame(iframe)
    
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "input.arrow__input.mini-suggest__input"))
        )
    
        print(element)  # <selenium.webdriver.remote.webelement.WebElement (session="5e3642980c7d8fcb1b687f3c9a716998", element="f.15CF8DCC914EA871801192FF570A26AF.d.A418C847E39359367688E91E0850A734.e.5")>
    
        element.send_keys("Найдено!")
    
        time.sleep(20)
    
    finally:
        driver.quit()


    660eae28c59d0142362756.png
    Ответ написан
    2 комментария
  • Что выбрать WP или Python+Django для сайта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Короткий ответ (с учетом указанного ТЗ) - WP.

    Длинный ответ:
    публиковать страницы, создавать иерархию страниц, чпу url, какой то слайдер с картинками

    Учитывая типовое ТЗ, ответ - WP (все это уже реализовано, приимущественно бесплатно и в большом количестве).
    небольшое количество услуги в регионе

    Вы на старте выхода в интернет, предположу, что количество оказываемых услуг оффлайн - будет примерно равнозначно количеству оказываемых услуг онлайн, а значит производительность инструмента не первостепенна, ответ - WP.
    Нашли компанию, предлагает разработку сайта на WP или на Python+Django (дороже и дольше)

    Начнем с того, что это не равнозначные инструмент, ибо WP - это готовый движок/CMS для сайта + сам сайт (готовые шаблоны), развернул на хостинге и готово. А вот Django - это фреймворк, т.е. некий набор инструментов, да он позволяет сделать из него что угодно (ах*енно сделать (на правах отвечающего)), но потом. Соответственно, если вопроса в функционале и производительности не стоит (и предположу - сделать быстро) - выбираем WP, будет дешевле и быстрее.

    Что обычно я использую (от начального проекта к финальному):
    1. WP в стоке.
    2. Оптимизация производительности WP в 2-3 раза под конкретные задачи (от wp там мало что остается, но ценник и сроки еще не такие, как в п3).
    3. ASP.NET (если нужно быстрее любого WP и более специфический функционал).
    4. ASP.NET + кэширование (если прям совсем прижало по производительности).
    Ответ написан
    6 комментариев
  • Как добавить график на страницу Razor?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Если не сложно, добавьте пример самого графика. Как добавить туда значения - я как-нибудь доковыляю сам.

    Пример из библиотеки Plotly.Blazor https://github.com/LayTec-AG/Plotly.Blazor#usage
    Ответ написан
    Комментировать
  • Как изменить метаданные на C#?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать