docker - Omnisharp 在使用 docker 时无声地崩溃

标签 docker visual-studio-code .net-core

我正在运行 basic dotnetcore example在 docker 中,它工作正常。一切都建立起来了,我的 API 也可用了。它还会聆听完美的实时变化。您可以在问题底部找到 Dockerfile 和 docker-compose。

但是,我正在尝试使用 Visual-studio-code(内部人员和常规)结合 omnisharp(默认 c# 扩展)来处理代码,但它一直在我身上崩溃。

它会工作几秒钟,然后让我遇到 180 多个“问题”,所有这些都是错误的(应用程序工作..)

在我看来,输出没有任何指示(从重启到崩溃):

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 运行应用程序(我不想做的事情)它工作正常。

docker 文件:

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

撰写:

version: "3"
services:

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

到目前为止,我最好的猜测是它与 dotnet restore 和/或 bin/obj 文件夹有关。运行 dotnet clean 然后启动应用程序没有任何区别。

如有任何帮助,我们将不胜感激。

最佳答案

嗨,瑞克,你弄明白了吗?我遇到了同样的问题,试图在 docker 容器内使用 Omnisharp 扩展运行调试器。

我看到了您提到的那些 bin/obj 引用,这似乎是由于 .net 如何配置运行时环境。这似乎是基于 dotnet 共享文件夹的位置。这篇文章解释了其中的一部分: What is the purpose of msbuild's GenerateRuntimeConfigurationFiles?

我认为问题在于此共享文件夹与实际主机(我正在运行的机器)和 docker 容器上的内容不同。因此,当您在容器中运行 dotnet 时,它会根据该容器中的内容配置运行时。这会抛出 Omnisharp,因为它在容器外运行。

我认为我们可以将这些共享文件夹定义并卷挂载为 dockerfile(或 docker-compose)的一部分。但我还没有得到一些工作。我知道这是几个月前的事,但请检查您是否明白这一点。谢谢!

关于docker - Omnisharp 在使用 docker 时无声地崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51152474/

相关文章:

python - 在docker和psycopg2中使用Python中的unittest

javascript - 在 VS Code EADDRINUSE 错误上调试 Node.JS

c# - TagBuilder 查找特定的内部元素并添加新属性

asp.net-core - 默认 ASP.NET 核心项目无法发布

asp.net - 无法使用入口点运行Docker容器

docker - 在Docker中复制具有相同ID的图像

docker - 如何使用 bsd-mailx 从 docker 容器发送电子邮件到主机 postfix?

wordpress - 使用 Docker 卷的 WP-CLI 文件权限问题

visual-studio-code - VSCode 在长代码行上滚动到下一行

visual-studio-code - 在 VS Code 中运行 Chrome 调试器的问题