如何使用 dockerfile 编译并运行 csharp 文件

cbu*_*ler 2 c# docker

如何使用 docker 文件为简单的 csharp 应用程序编译单个文件(或多个文件)?我的目标是创建一个类似于 w3 学校的小型 csharp repl。我已经看过这个问题,但它不适合我的需要。我没有 .csproj 文件,我从一个简单的 main.cs 文件开始,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;

class MainClass {
    static void Main() {
        Console.WriteLine("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道我可以将上面的代码作为字符串并使用 dockerfile 来编译并运行它以获得输出。具体来说,我可以使用什么基础映像?在执行此操作之前我是否需要安装任何其他软件包?下面的 dockerfile 取自另一个堆栈溢出问题,这似乎很合理,但我不想编译 asp.net 程序。

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /app

COPY <your app>.csproj .
RUN dotnet restore <your app>.csproj

COPY . .
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=build /app/out ./

ENTRYPOINT ["dotnet", "<your app>.dll"]
Run Code Online (Sandbox Code Playgroud)

Han*_*ian 6

您可以使用该命令dotnet new console创建基本控制台应用程序项目,然后将您的文件复制到生成的 Program.cs 文件之上以替换它。

我冒昧地将您的 .NET core 2.2 映像替换为 .NET 6.0 映像,因为不再支持 2.2 映像。

如果您使用“MyFile.cs”中的代码命名文件并使用此 Dockerfile,它应该可以工作

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /app
RUN dotnet new console
COPY MyFile.cs Program.cs
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/runtime:6.0
WORKDIR /app
COPY --from=build /app/out .
ENTRYPOINT ["dotnet", "app.dll"]
Run Code Online (Sandbox Code Playgroud)

构建并运行

docker build -t testimage .
docker run --rm testimage
Run Code Online (Sandbox Code Playgroud)

通过对 .NET 6 进行更改,您不再需要大量 C# 样板代码,因此您还可以将程序文件减少到一行

Console.WriteLine("Hello World!");
Run Code Online (Sandbox Code Playgroud)