Working on the project editor.

Implemented a very basic version of command line tool.
This commit is contained in:
Creeper Lv
2026-01-11 03:54:14 +11:00
parent 609e51d375
commit 1bcaff76b2
19 changed files with 452 additions and 5 deletions

47
Progrart.Cmd/Dockerfile Normal file
View File

@@ -0,0 +1,47 @@
# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
# These ARGs allow for swapping out the base used to make the final image when debugging from VS
ARG LAUNCHING_FROM_VS
# This sets the base image for final, but only if LAUNCHING_FROM_VS has been defined
ARG FINAL_BASE_IMAGE=${LAUNCHING_FROM_VS:+aotdebug}
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/runtime:10.0 AS base
USER $APP_UID
WORKDIR /app
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
# Install clang/zlib1g-dev dependencies for publishing to native
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
clang zlib1g-dev
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Directory.Packages.props", "."]
COPY ["Progrart.Cmd/Progrart.Cmd.csproj", "Progrart.Cmd/"]
RUN dotnet restore "./Progrart.Cmd/Progrart.Cmd.csproj"
COPY . .
WORKDIR "/src/Progrart.Cmd"
RUN dotnet build "./Progrart.Cmd.csproj" -c $BUILD_CONFIGURATION -o /app/build
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Progrart.Cmd.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=true
# This stage is used as the base for the final stage when launching from VS to support debugging in regular mode (Default when not using the Debug configuration)
FROM base AS aotdebug
USER root
# Install GDB to support native debugging
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
gdb
USER app
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM ${FINAL_BASE_IMAGE:-mcr.microsoft.com/dotnet/runtime-deps:10.0} AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["./Progrart.Cmd"]

67
Progrart.Cmd/Program.cs Normal file
View File

@@ -0,0 +1,67 @@
using Progrart.Core.ProjectSystem;
using Progrart.Core.Storage;
namespace Progrart.Cmd
{
internal class Program
{
static void Main(string[] args)
{
string? project_file = null;
string? configuration = null;
for (int i = 0; i < args.Length; i++)
{
string? item = args[i];
switch (item)
{
case "-c":
case "--config":
case "--configuration":
{
i++;
item = args[i];
configuration = item;
}
break;
default:
{
if (File.Exists(item))
{
project_file = item;
}
}
break;
}
}
if (project_file != null)
if (configuration != null)
{
FileInfo fi = new FileInfo(project_file);
if (fi.Directory is DirectoryInfo di)
{
using var fs = fi.OpenRead();
using var sr = new StreamReader(fs);
ClassicStorageProvider provider = new ClassicStorageProvider(di);
Builder builder = new Builder(sr, provider);
builder.OnProgressUpdate = (v, m) =>
{
Console.WriteLine($"{v}/{m}");
};
builder.OnCompleted = () =>
{
Environment.Exit(0);
};
Task.Run(async () =>
{
await builder.Build(configuration);
});
while (true)
{
Thread.Sleep(1000);
}
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PublishAot>true</PublishAot>
<InvariantGlobalization>true</InvariantGlobalization>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Progrart.Core\Progrart.Core.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,10 @@
{
"profiles": {
"Progrart.Cmd": {
"commandName": "Project"
},
"Container (Dockerfile)": {
"commandName": "Docker"
}
}
}