我们试图在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/