首页 > 解决方案 > 如何在dockerfile中复制引用项目的.csproj

问题描述

我们正在尝试在 windows 1809 上构建一个 iot edge 模块。我们的项目文件夹层次结构如下:

----BaseDir
    |---ClassLibrary1

    |---ClassLibrary2
        |--references ClassLibrary1
        |--references ClassLibrary3

    |---ClassLibrary3
         |--references ClassLibrary4
         |--references ClassLibrary1

    |---ClassLibrary4

    |---OurIOTEdgeModule
        |--references ClassLibrary2

我们的 docker 文件如下所示:

FROM microsoft/dotnet:2.1-sdk AS build-env
WORKDIR /app
COPY *.csproj ./
COPY ./NuGet.Config ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet:2.1-runtime-nanoserver-1809
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["dotnet", "IOTEdgeModule.dll"]

当我们构建这个 IOT 边缘模块时,我们没有收到任何构建错误。当我们在 EDGE 设备上部署模块时,我们面临着这个问题。

我们的 IOTEdgeModule 引用了 ClassLibrary2.csproj。ClassLibrary2 又引用 ClassLibrary3.csproj,后者又引用 ClassLibrary4.csproj。我们的 IOT Edge 模块只能获取 ClassLibrary2.csproj 的引用,但无法引用所有其他依赖的 *.csprojs。

如何修改docker文件来解决这个问题?建议将不胜感激。

标签: c#dockerazure-iot-edge

解决方案


这对于 IoT Edge 模板提供的 dockerfile 是不可能的。官方 IoT Edge 存储库包含具有相同结构的示例。他们不是在 docker 容器内构建,而是在外部构建,并且只将构建的二进制文件复制到最终映像中。请参阅此示例项目文件和相应的Dockerfile

ARG base_tag=2.1.10-alpine3.7
FROM mcr.microsoft.com/dotnet/core/runtime:${base_tag}

ARG EXE_DIR=.

ENV MODULE_NAME "SimulatedTemperatureSensor.dll"

WORKDIR /app

COPY $EXE_DIR/ ./

# Add an unprivileged user account for running the module
RUN adduser -Ds /bin/sh moduleuser 
USER moduleuser

CMD echo "$(date --utc +"[%Y-%m-%d %H:%M:%S %:z]"): Starting Module" && \
    exec /usr/bin/dotnet SimulatedTemperatureSensor.dll

更新:这里有一个类似问题的解决方案。


推荐阅读