如何使用 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 編譯并運行它以獲取輸出。具體來說,我可以使用什么基本映像,在執行此操作之前是否需要安裝任何其他軟體包?下面的 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"]
uj5u.com熱心網友回復:
您可以使用該命令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"]
構建并運行
docker build -t testimage .
docker run --rm testimage
通過對 .NET 6 所做的更改,您不再需要大量樣板 C# 代碼,因此您還可以將程式檔案縮減為一行
Console.WriteLine("Hello World!");
uj5u.com熱心網友回復:
也許你改變了你的方法:創建一個完整的 Web 應用程式并使用 CSharpCodeProvider。您可以在此處閱讀有關 CSharpCodeProvider 的更多資訊:https ://docs.microsoft.com/en-us/troubleshoot/dotnet/csharp/compile-code-using-compiler
uj5u.com熱心網友回復:
.csproj 站在那里是有原因的。要在沒有它的情況下編譯 .cs 檔案,您必須在編譯時找到相應的命令列引數來構造最小的配置集(如編譯 C/C 專案時的 -I、-D、-L 等) ,這將導致您的專案不熟悉標準 IDE(VS、VSCode),并且需要更多時間將 how-to-build 轉移給您的隊友。
在大多數類似生產的應用程式中,事情變得復雜,您很快就會需要一個專案組態檔。這就是為什么C/C 專案中有Makefile,Java-Maven專案中有pom.xml等。
IMO,“過度”簡化不會使您的專案更簡單。專注于如何使用默認配置解決業務問題并在需要時將其最小化/簡化將是更好的選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403819.html
標籤:
