You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ASP.NET 7.0-Alpine镜像解析十进制数遇格式异常如何解决?

问题描述

有一段用于解析字符串的代码如下:

var allowedStyles = NumberStyles.Number;

CultureInfo cultureInfoDe = new CultureInfo("de-DE");

decimal value = decimal.Parse("10.000,22", allowedStyles, cultureInfoDe);

这段代码在Windows机器的Kestrel Web API中运行正常,使用默认Dockerfile(FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base)启动时也能正常工作,但使用aspnet:7.0-alpine镜像时会抛出System.FormatException异常,对应的Dockerfile如下:

FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine AS base

RUN apk add --no-cache icu-libs

ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["dockerapi.csproj", "."]
RUN dotnet restore "./././dockerapi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "./dockerapi.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./dockerapi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENTRYPOINT ["dotnet", "dockerapi.dll"]

请问该如何解析该字符串?

解决方案

问题根源是Alpine镜像的ICU库默认缺少完整的区域数据,导致de-DE文化的格式规则无法正确加载,可通过以下几种方式解决:

1. 安装完整ICU库替代基础版本

修改Dockerfile的base阶段,将icu-libs替换为icu-full包,它包含完整的区域化数据:

RUN apk add --no-cache icu-full

2. 手动指定格式规则(不依赖系统区域)

在代码中直接定义NumberFormatInfo,明确指定千位分隔符和小数分隔符,避免依赖系统的文化配置:

var customFormat = new NumberFormatInfo
{
    NumberGroupSeparator = ".",
    NumberDecimalSeparator = ",",
    NumberGroupSizes = new[] { 3 }
};

decimal value = decimal.Parse("10.000,22", NumberStyles.Number, customFormat);

3. 配置并生成指定区域设置

在Dockerfile中添加区域配置,确保de_DE.UTF-8区域生效:

FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine AS base

RUN apk add --no-cache icu-libs tzdata locales
RUN echo "de_DE.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen

ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
ENV LC_ALL=de_DE.UTF-8
ENV LANG=de_DE.UTF-8

# 后续Dockerfile内容不变

内容的提问来源于stack exchange,提问作者Mathias F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:44:53