【发布时间】:2020-11-16 17:19:18
【问题描述】:
我有一个 Visual Studio 解决方案,其中包含许多 API 项目,然后这些 API 项目中包含 C# 库依赖项。我已经成功地“码头化”了我的解决方案。
出现的一个问题是我的一个 C# 库中包含在启动时读取的 xml 文件。当我独立运行这些库时,路径是 C# 构建的路径,即:
Debug: C:\development\gems\Backend1\DataAPI\bin\Debug\netcoreapp3.1
Release: C:\development\gems\Backend1\DataAPI\bin\Release\netcoreapp3.1
XML 文件被添加到上面的 Debug 和 Release 路径中,它们在 Visual Studio 的非 Dockerized 环境中可以正常读取。
但是对于 Docker 映像,路径现在是“应用程序”。并且这些文件不在“应用程序”的基础级别。他们在:
app/bin/Debug/netcoreapp3.1 和 app/bin/Release/netcoreapp3.1。
我不想将这些文件重新复制到“应用程序”的外部级别,而是有一个可以引用并在 Dockerfile 中设置的相对路径集。这可能吗?
你会提出什么解决方案?
谢谢!
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["DataAPI/DataAPI.csproj", "DataAPI/"]
COPY ["IdentityServer/IdentityServer.csproj", "IdentityServer/"]
COPY ["ServiceDiscovery/ServiceDiscovery.csproj", "ServiceDiscovery/"]
COPY ["Data/Data.csproj", "Data/"]
COPY ["Utilities/Utilities.csproj", "Utilities/"]
COPY ["UnitConversion/UnitConversion.csproj", "UnitConversion/"]
# Trying (but failing) to copy from my /src/UnitConversion/OverrideDataNames.xml to /app
COPY ["UnitConversion/OverrideDataNames.xml", "/app"]
RUN dotnet restore "DataAPI/DataAPI.csproj"
COPY . .
WORKDIR "/src/DataAPI"
RUN dotnet build "DataAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DataAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DataAPI.dll"]
【问题讨论】:
-
不知道我是否在回答您的问题,但是当您构建映像时,您可以将文件发布到您希望的任何文件夹
RUN dotnet publish -c Release -o /app -
@Jane:感谢您的回复。我更新了上面的问题以包含 VS-2019 生成的 Dockerfile。我只是想将一个 xml 文件 (OverrideDataNames.xml) 复制到应用程序的顶层。请查看现在添加的代码。那条线不工作。有什么建议么?我究竟做错了什么。谢谢!!
标签: c# visual-studio docker dockerfile