Omnisharp молча вылетает при работе с докером - PullRequest
0 голосов
/ 03 июля 2018

Я использую базовый пример dotnetcore в докере, и он работает нормально. Все строит и мой API доступен. Он также слушает живые изменения, которые совершенны. Вы можете найти Dockerfile и docker-compose внизу вопроса.

Однако я пытаюсь работать с кодом с использованием Visual-studio-кода (инсайдеров и обычного кода) в сочетании с omnisharp (расширение c # по умолчанию), и он продолжает падать на мне.

Это будет работать в течение нескольких секунд, и после этого у меня останется 180+ «проблем», все из которых ложные (приложение работает ..)

Вывод ничего не показывает imo (от перезапуска до сбоя):

Starting OmniSharp server at 7/3/2018, 11:52:55 AM
    Target: /home/mastermindzh/code/

OmniSharp server started
    Path: /home/mastermindzh/.vscode-insiders/extensions/ms-vscode.csharp-1.15.2/.omnisharp/1.30.1/run
    PID: 2323

[info]: OmniSharp.Stdio.Host
        Starting OmniSharp on arch 0.0 (x64)
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Located 1 MSBuild instance(s)
            1: StandAlone 15.0 - "/home/mastermindzh/.vscode-insiders/extensions/ms-vscode.csharp-1.15.2/.omnisharp/1.30.1/omnisharp/msbuild/15.0/Bin"
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        MSBUILD_EXE_PATH environment variable set to '/home/mastermindzh/.vscode-insiders/extensions/ms-vscode.csharp-1.15.2/.omnisharp/1.30.1/omnisharp/msbuild/15.0/Bin/MSBuild.dll'
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Registered MSBuild instance: StandAlone 15.0 - "/home/mastermindzh/.vscode-insiders/extensions/ms-vscode.csharp-1.15.2/.omnisharp/1.30.1/omnisharp/msbuild/15.0/Bin"
            MSBuildExtensionsPath = /home/mastermindzh/.vscode-insiders/extensions/ms-vscode.csharp-1.15.2/.omnisharp/1.30.1/omnisharp/msbuild
            BypassFrameworkInstallChecks = true
            CscToolPath = /home/mastermindzh/.vscode-insiders/extensions/ms-vscode.csharp-1.15.2/.omnisharp/1.30.1/omnisharp/msbuild/15.0/Bin/Roslyn
            CscToolExe = csc.exe
            MSBuildToolsPath = /home/mastermindzh/.vscode-insiders/extensions/ms-vscode.csharp-1.15.2/.omnisharp/1.30.1/omnisharp/msbuild/15.0/Bin
[info]: OmniSharp.Cake.CakeProjectSystem
        Detecting Cake files in '/home/mastermindzh/code/'.
[info]: OmniSharp.Cake.CakeProjectSystem
        Could not find any Cake files
[info]: OmniSharp.DotNet.DotNetProjectSystem
        Initializing in /home/mastermindzh/code/
[info]: OmniSharp.DotNet.DotNetProjectSystem
        Auto package restore: False
[info]: OmniSharp.DotNet.DotNetProjectSystem
        Update workspace context
[info]: OmniSharp.DotNet.DotNetProjectSystem
        Resolving projects references
[info]: OmniSharp.MSBuild.ProjectSystem
        No solution files found in '/home/mastermindzh/code/'
[info]: OmniSharp.MSBuild.ProjectManager
        Queue project update for '/home/mastermindzh/code//api/api.csproj'
[info]: OmniSharp.Script.ScriptProjectSystem
        Detecting CSX files in '/home/mastermindzh/code/'.
[info]: OmniSharp.Script.ScriptProjectSystem
        Could not find any CSX files
[info]: OmniSharp.Stdio.Host
        Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.CSharpWorkspaceOptionsProvider
[info]: OmniSharp.Stdio.Host
        Configuration finished.
[info]: OmniSharp.Stdio.Host
        Omnisharp server running using Stdio at location '/home/mastermindzh/code/' on host 30096.
[info]: OmniSharp.MSBuild.ProjectManager
        Loading project: /home/mastermindzh/code//api/api.csproj
[info]: OmniSharp.MSBuild.ProjectManager
        Adding project '/home/mastermindzh/code//api/api.csproj'
[info]: OmniSharp.MSBuild.ProjectManager
        Update project: api

После этого расширение просто больше не работает, пока я не перезапущу его, и оно снова падает. Это происходит только при запуске в Docker или из cli, если я запускаю приложение через vscode (что-то, что я не хочу делать), оно работает нормально.

Dockerfile:

FROM microsoft/dotnet:2.1-sdk-stretch
WORKDIR /app
EXPOSE 5000
CMD dotnet restore && dotnet watch run

Compose:

version: "3"
services:

    web:
        build:
            context: ./../../api
            dockerfile: ./../docker/images/api/Dockerfile
        ports:
            - "5000:5000"
            - "5001:5001"
        volumes:
            - ./../../api/:/app
        depends_on:
             - db

Мое лучшее предположение на данный момент в том, что это связано с восстановлением dotnet и / или папками bin / obj. Чистый запуск dotnet и запуск приложения не имеют значения.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

У меня есть обновление. Если вы все еще работаете над этим, возможно, это может помочь.

Итак, как упоминалось в моем предыдущем посте, проблема в том, что ваш отладчик VSCode работает за пределами контейнера докера. Вам нужно запустить удаленный отладчик в этом контейнере, а затем подключить к нему VSCode.

Я последовал примеру, опубликованному здесь. Это для консольного приложения. https://github.com/sleemer/docker.dotnet.debug

Я расширил приведенный выше пример для приложений webapi и mvc. Вы можете увидеть это здесь: https://github.com/johnlee/dockerdotnetcorevscode

У меня тоже есть запись, хотя в основном это для моих собственных заметок, поэтому, возможно, не самая легкая для чтения. https://solidfish.com/building-net-core-apps-docker-with-vscode-on-mac-or-windows/

Другой вариант - запустить VSCode внутри контейнера докера. Это, возможно, немного излишне, но это кажется возможным. https://www.aaron -powell.com / сообщения / 2017-09-21-vscode-Linux-Докер-окно /

0 голосов
/ 23 октября 2018

Привет, Рик, ты смог выяснить это? Я сталкиваюсь с той же проблемой, пытаясь запустить отладчик, используя расширение Omnisharp внутри контейнера докера.

Я видел упомянутые вами ссылки на bin / obj, и, похоже, это связано с тем, как .net настраивает среду выполнения. Кажется, это основано на расположении общей папки dotnet. Этот пост объясняет часть этого: Какова цель GenerateRuntimeConfigurationFiles msbuild?

Я думаю, что проблема в том, что эта общая папка отличается от реального хоста (компьютера, на котором я работаю) и от того, что находится в контейнере Docker. Поэтому, когда вы запускаете dotnet в контейнере, он конфигурирует среду выполнения на основе того, что находится в этом контейнере. Это сбрасывает Omnisharp, поскольку он работает за пределами контейнера.

Я думаю, мы могли бы определить и смонтировать эти общие папки как часть файла dockerfile (или docker-compose). Но я еще не получил что-то рабочее. Я знаю, что это было несколько месяцев назад, но проверил, понял ли ты это. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...