在Dockerfile中安装microsoft net sdk blazorwebassembly aot时出错



在构建Blazor项目时,我正试图从Dockerfile运行dotnet workload install microsoft-net-sdk-blazorwebassembly-aot,以便启用AOT WASM编译。

以下是相关的Dockerfile代码:

FROM mcr.microsoft.com/dotnet/sdk:6.0-focal-amd64 AS builder
...
RUN dotnet workload install microsoft-net-sdk-blazorwebassembly-aot
RUN dotnet publish -c Release

然而,这失败了,错误如下:

Updated advertising manifest microsoft.net.sdk.ios.
Updated advertising manifest microsoft.net.sdk.maccatalyst.
Updated advertising manifest microsoft.net.sdk.macos.
Updated advertising manifest microsoft.net.workload.mono.toolchain.
Updated advertising manifest microsoft.net.sdk.tvos.
Updated advertising manifest microsoft.net.sdk.android.
Installing workload manifest microsoft.net.sdk.ios version 14.5.100-preview.5.894.
Workload installation failed, rolling back installed packs...
Installing workload manifest microsoft.net.sdk.ios version 14.5.100-preview.5.881.
Installation roll back failed: Failed to install manifest microsoft.net.sdk.ios version 14.5.100-preview.5.881: The transaction has aborted..
Workload installation failed: Failed to install manifest microsoft.net.sdk.ios version 14.5.100-preview.5.894: Invalid cross-device link.

我还尝试了--skip-manifest,这似乎是为了安装工作负载,但随后无法执行AOT构建。

RUN dotnet workload install microsoft-net-sdk-blazorwebassembly-aot --skip-manifest-update
Installing pack Microsoft.NETCore.App.Runtime.Mono.browser-wasm version 6.0.0-preview.5.21301.5...
Writing workload pack installation record for Microsoft.NETCore.App.Runtime.Mono.browser-wasm version 6.0.0-preview.5.21301.5...
...
Garbage collecting for SDK feature bands 6.0.100...
Successfully installed workload(s) microsoft-net-sdk-blazorwebassembly-aot.
RUN dotnet publish -c Release
...
Optimizing assemblies for size, which may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
AOT'ing 50 assemblies
/usr/share/dotnet/packs/Microsoft.NET.Runtime.WebAssembly.Sdk/6.0.0-preview.5.21301.5/Sdk/WasmApp.targets(507,5): error MSB3073: The command "emcc --version" exited with code 1.

有什么建议吗?

Morgan,您遇到了两个问题:

  1. 在跳过清单(这是解决方法(上有问题https://github.com/dotnet/sdk/issues/18450
  2. emcc --version错误是问题https://github.com/dotnet/runtime/issues/54342并通过首先安装Python解决。。。参见示例:https://github.com/timheuer/PictureFixer/blob/docker/PictureFixer/Dockerfile#L11-L12(回购中的码头分行(
  3. 然后,您将遇到另一个错误(找不到交叉编译器(,这是一个问题https://github.com/dotnet/runtime/pull/54651(已签入(

一旦在您可以使用的图像中修复了#3,就应该确保您在脚本中添加#2。完整Docker文件示例:

FROM mcr.microsoft.com/dotnet/nightly/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
#FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
FROM mcr.microsoft.com/dotnet/nightly/sdk:6.0 AS build 
COPY ["nuget.config", "nuget.config"]
RUN apt-get update
RUN apt-get install --no-install-recommends --yes python3
RUN dotnet workload install microsoft-net-sdk-blazorwebassembly-aot --skip-manifest-update
WORKDIR /src
COPY ["Server/PictureFixer.Server.csproj", "Server/"]
COPY ["Shared/PictureFixer.Shared.csproj", "Shared/"]
COPY ["Client/PictureFixer.Client.csproj", "Client/"]
RUN dotnet restore "Server/PictureFixer.Server.csproj"
COPY . .
WORKDIR "/src/Server"
RUN dotnet build "PictureFixer.Server.csproj" -c Release -o /app/build --nologo
FROM build AS publish
RUN dotnet publish "PictureFixer.Server.csproj" -c Release -o /app/publish --nologo
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "PictureFixer.Server.dll"]

您可以通过将其添加到Blazor-Wasm项目csproj:中,暂时解决#3问题

<PropertyGroup>
<_MonoAotCrossCompilerPath>@(MonoAotCrossCompiler->WithMetadataValue('RuntimeIdentifier','browser-wasm'))</_MonoAotCrossCompilerPath>
</PropertyGroup>

相关内容

  • 没有找到相关文章

最新更新