c# - 如何在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文件来解决这个问题?建议将不胜感激。
解决方案
这对于 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
更新:这里有一个类似问题的解决方案。
推荐阅读
- django - 使用 Apache mod_wsgi 在 CentOS7 上配置 Django WebApp
- laravel - 由于尝试将总和放入数组而导致的未定义偏移错误
- python - 如何为我的 y_pred 分配正确的 ID?
- javascript - a 标签上的 Onclick 事件
- javascript - Java将十六进制解析为整数
- python-3.x - 如何使用 Python 删除网格线以区分格点?
- php - 带有 PHP 7.4 的 MongoDB 3.6:未知运算符 $text
- scala - 装配 scala 项目导致重复数据删除错误
- linux - 我如何理解内核 oops 错误代码?
- postgresql - 使用 JPA 的 Criteria API 按日期间隔分组