带有文件内容的.Net资源使docker生成失败

带有文件内容的.Net资源使docker生成失败,.net,docker,.net-core,resx,.net,Docker,.net Core,Resx,“dotnet build”生成一个没有错误的项目,同时docker build给出以下错误: /src/Audit.Worker/Example/Resources.resx : error MSB3103: Invalid Resx file. System.IO.DirectoryNotFoundException: Could not find a part of the path '/src/Audit.Worker/Example/data/example.yaml'. [/src/

“dotnet build”生成一个没有错误的项目,同时docker build给出以下错误:

/src/Audit.Worker/Example/Resources.resx : error MSB3103: Invalid Resx file. System.IO.DirectoryNotFoundException: Could not find a part of the path '/src/Audit.Worker/Example/data/example.yaml'. [/src/Audit.Worker/Audit.Worker.csproj]
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 ["./Audit.Worker/Audit.Worker.csproj", "Audit.Worker/"]
RUN dotnet restore "Audit.Worker/Audit.Worker.csproj"
COPY . /src/
WORKDIR "/src/Audit.Worker/"
RUN dotnet build "Audit.Worker.csproj" -c Release -o /apps

FROM build AS publish
RUN dotnet publish "Audit.Worker.csproj" -c Release -o /apps

FROM base AS final
WORKDIR /apps
COPY --from=publish /apps .
ENTRYPOINT ["dotnet", "Audit.Worker.dll"]

最终,我找到了原因

Visual Studio资源工具(我假定它负责.resx文件内容生成)假定文件路径不区分大小写,并以小写形式生成所有文件路径(即data\example.yaml)。同时,用于构建的基本docker映像基于Linux,其中路径区分大小写

  <data name="Example" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>data\example.yaml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
  </data>

data\example.yaml;字符串,mscorlib,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089;utf-8
一句话:尽管有效的解决方案是手动编辑.resx文件(或者在需要的地方使用小写),但我们决定完全避免使用资源。似乎再也没有适当的支持了