繁体   English   中英

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

[英]How to compile and run a csharp file using dockerfile

如何使用 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!");
    }
}

我想知道我可以把上面的代码作为一个字符串,用一个dockerfile编译运行得到output。 具体来说,我可以使用什么基础映像,在执行此操作之前是否需要安装任何其他软件包? 下面的 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"]

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

我冒昧地将您的 .NET 核心 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"]

构建并运行

docker build -t testimage .
docker run --rm testimage

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

Console.WriteLine("Hello World!");

也许你改变了你的方法:创建一个完整的 Web 应用程序并使用 CSharpCodeProvider。 您可以在此处阅读有关 CSharpCodeProvider 的更多信息: https://docs.microsoft.com/en-us/troubleshoot/dotnet/csharp/compile-code-using-compiler

.csproj 站在那里是有原因的。 要在没有它的情况下编译.cs 文件,您必须找到相应的命令行 arguments 以在编译时构造最小的配置集(如编译 C/C++ 项目时的 -I、-D、-L 等) ,这将导致您的项目不熟悉标准 IDE(VS、VSCode),并需要更多时间将如何构建的方法传授给您的队友。

在大多数类似生产的应用程序中,事情变得复杂,您很快就会需要一个项目配置文件。 这就是为什么C/C++项目中有Makefile,Java-Maven项目中有pom.xml等。

IMO,“过度”简化不会使您的项目更简单。 专注于如何使用默认配置解决业务问题并在需要时将其最小化/简化将是更好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM