C# решение не может найти тип или пространство имен при отладке через docker -compose - PullRequest
0 голосов
/ 19 апреля 2020

Проблема:

Я использую два ASP. Net Core Web-Apis в контейнерах, указанных в файле docker -compose.yml. Эти ASP. Net Основные проекты являются частью решения с некоторыми другими проектами. В моем docker -компонентном файле я указываю том, который сопоставляет папку моего решения с обоими контейнерами (для debuggin / do tnet watch).

Когда я запускаю docker -compose, я получаю ошибки из Visual Studio Code и Rider, например: The type or namespace name 'ISomeService' could not be found

Также я видел ошибки прав доступа к файлам в папке /obj и /bin.

При остановке docker складывать и удалять папки obj и bin каждого проекта в решении - все работает после восстановления. Но когда я снова запускаю docker -композицию, у меня снова возникает та же проблема, и мне приходится повторять эту процедуру после каждого изменения.

Моя настройка:
ОС: Linux
Docker: Docker версия 19.03.8, сборка afacb8b7f0
Docker -Создание: docker -создание версии 1.25.3, сборка d4d1b42b
ASP. Net Ядро: 3.1

docker -compose.dev.yml

version: "3.7"
services:
...
api1:
    build:
      target: debug
    volumes:
      - ./backend/src:/app
    environment:
      ASPNETCORE_ENVIRONMENT: Development
      API_ConnectionStrings__MyCon: 

  api2:
    build:
      target: debug
    volumes:
      - ./backend/src:/app
    environment:
      ASPNETCORE_ENVIRONMENT: Development
      API_ConnectionStrings__MyOtherCon:
...

Dockerfile (Они в основном одинаковы для каждого API )

# DEBUG ##########################################
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS debug

ENV DOTNET_USE_POLLING_FILE_WATCHER 1

# install debugger for Net Core
RUN apt-get update
RUN apt-get install -y unzip
RUN curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg

COPY . /app
WORKDIR /app/My.Api/

RUN dotnet restore

# RUN mkdir /out/
# RUN dotnet publish --no-restore --output /out/ --configuration Production

ENTRYPOINT ["dotnet", "watch", "run", "--runtime DEVELOPEMENT"]

# PROD ###########################################
...

Я изучал эту проблему уже более недели и не могу найти решения. Есть идеи / предложения? Есть ли у Мэйби другой способ справиться с отладкой и сделать ядро ​​tnet (на Linux)?

Извините за мой плохой английский sh.

1 Ответ

0 голосов
/ 23 апреля 2020

Я решил свою проблему, изменив путь bin и obj к каталогу вне моей подключенной папки. Это решило проблемы с разрешениями.

Чтобы изменить путь, мне пришлось добавить файл Directory.Buid.props в каждый проект моего решения со следующим содержанием:

<Project>
    <PropertyGroup>
        <BaseIntermediateOutputPath>/tmp/myapp/debug/obj/$(MSBuildProjectName)/</BaseIntermediateOutputPath>
        <BaseOutputPath>/tmp/myapp/debug/bin/$(MSBuildProjectName)/</BaseOutputPath>
    </PropertyGroup>
</Project>

Это решение работает на данный момент, но не может быть применен к Windows Dev Env из-за папки tmp. Что может сработать, так это взять родительскую папку (не пробовал). Если есть другие решения, позвольте мне сейчас.

...