我们试图在Windows 1809上构建物联网边缘模块。我们的Project文件夹层次结构如下:

----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模块时,我们不会遇到任何构建错误。当我们在EDGE设备上部署模块时,我们面临着这个问题。

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

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

最佳答案

对于IoT Edge模板提供的dockerfile,这是不可能的。官方的IoT Edge仓库具有相同结构的示例。它们不是在docker容器中构建,而是在外部构建,仅将构建的二进制文件复制到最终镜像中。请参见此example project file和相应的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


更新:解决了类似问题here

关于c# - 如何在dockerfile中复制引用项目的.csproj,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57955205/

10-12 02:31