[英]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.