0

我正在尝试使用 coreRT 和 Npgsql将 .net 核心控制台应用程序编译为 ubuntu 18.04 docker 容器上的本机可执行文件(linux-x64)。我目前正在使用 docker-compose 来设置数据库和应用程序容器。

码头工人-compose.yml

version: '3'

services:
    database:
        image: postgres:10
        environment:
            - POSTGRES_USER=dbuser
            - POSTGRES_PASSWORD=dbpassword
            - POSTGRES_DB=dbsample
        ports:
            - 5432:5432
        tmpfs:
            - /var/lib/postgresql/data:rw,noexec,nosuid,size=400m
        volumes:
            - ./db-init:/docker-entrypoint-initdb.d

    prototype:
        build: .
        depends_on:
            - database
        links:
            - database:database

Dockerfile

FROM ubuntu:18.04

RUN apt-get update \
    && apt-get install -y \
        apt-transport-https \
        build-essential \
        clang \
        cmake \
        curl \
        git-core \
        gpg \
        libbz2-dev \
        libkrb5-dev \
        libncurses5-dev \
        libncursesw5-dev \
        libreadline-dev \
        libsqlite3-dev \
        libssl-dev \
        llvm \
        make \
        parallel \
        wget \
        zlib1g-dev

RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg \
    && mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ \
    && wget -q https://packages.microsoft.com/config/ubuntu/18.04/prod.list \
    && mv prod.list /etc/apt/sources.list.d/microsoft-prod.list \
    && chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg \
    && chown root:root /etc/apt/sources.list.d/microsoft-prod.list \
    && apt-get update \
    && apt-get install -y dotnet-sdk-2.2

ENV CppCompilerAndLinker=clang-6.0
ENV DOTNET_CLI_TELEMETRY_OPTOUT=true

WORKDIR /home/app

COPY ./HelloWorld.fsproj /home/app
COPY ./nuget.config /home/app
RUN dotnet restore

COPY ./ /home/app
RUN dotnet publish -r linux-x64 -c Release -v detailed -o outside

CMD ./outside/HelloWorld

当它开始编译它时(dotnet publish -r linux-x64 -c Release -v detailed -o outside),它进入无限循环,消耗容器的所有可用内存。直到它显示此错误:

Task "Exec"
         "/root/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/1.0.0-alpha-27919-02/tools/ilc" @"obj/Release/netcoreapp2.2/linux-x64/native/HelloWorld.ilc.rsp"
         Killed
   1:7>/root/.nuget/packages/microsoft.dotnet.ilcompiler/1.0.0-alpha-27919-02/build/Microsoft.NETCore.Native.targets(249,5): error MSB3073: The command ""/root/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/1.0.0-alpha-27919-02/tools/ilc" @"obj/Release/netcoreapp2.2/linux-x64/native/HelloWorld.ilc.rsp"" exited with code 137. [/home/app/HelloWorld.fsproj]
       Done executing task "Exec" -- FAILED.
   1:7>Done building target "IlcCompile" in project "HelloWorld.fsproj" -- FAILED.
   1:7>Done Building Project "/home/app/HelloWorld.fsproj" (Publish target(s)) -- FAILED.

它似乎与 F# 中泛型和反射的使用有关。我已经查看了NpgsqlcoreRT 存储库,但找不到可以让它们都工作的人。有没有人遇到过这个问题?还是设法使用 Npgsql 和 coreRT?

4

0 回答 0