本文 适用于: ✔️ .NET 10 SDK 及更高版本
Name
dotnet project convert - 将基于文件的程序转换为基于项目的程序。
概要
dotnet project convert <FILE> [--dry-run] [--force] [--interactive]
[-o|--output <OUTPUT_DIRECTORY>]
dotnet project convert -h|--help
Description
该 dotnet project convert 命令将基于文件的程序转换为基于项目的程序。 此命令创建一个名为文件的新目录,搭建 .csproj 文件基架,将代码移动到与输入文件同名的文件,并将任何 #: 指令转换为 MSBuild 属性和引用。
这使得从单个文件无缝过渡到功能完备、可生成且可扩展的项目。 当基于文件的应用变得复杂时,或者你只需要基于项目的应用中提供的额外功能,则可以将其转换为标准项目。
转换过程
该命令执行以下作:
- 创建一个以输入文件命名的新目录(没有扩展名)。
- 使用相应的 SDK 和属性生成 .csproj 文件。
- 将源代码移动到与输入文件同名的文件。
-
#:从源代码中删除指令。 -
#:sdk转换指令:第一个#:sdk指令成为<Project Sdk="Sdk.Id">或<Project Sdk="Sdk.Id/version">属性,任何其他#:sdk指令都变为<Sdk Name="Sdk.Id" />或<Sdk Name="Sdk.Id" Version="version" />元素。 - 将
#:package指令<PackageReference>转换为项目文件中的元素。 - 将
#:property指令转换为项目文件中的 MSBuild 属性。 - 根据检测到的 SDK 和框架设置适当的 MSBuild 属性。
Arguments
FILE要转换的基于文件的程序的路径。 该文件必须是 C# 源文件(通常具有 .cs 扩展名)。
选项
--dry-run确定更改而不实际修改文件系统。 显示将在不执行转换的情况下创建或修改的内容。
--force即使存在格式不正确的指令,也强制转换。 默认情况下,如果命令遇到无法正确分析或转换的指令,则命令将失败。
-
--interactive允许命令停止并等待用户输入或操作。 例如,完成身份验证。
-o|--output <OUTPUT_DIRECTORY>指定转换后的项目的输出目录。 如果未指定,则会使用与当前目录中的输入文件(无扩展名)相同的名称创建目录。
-
-?|-h|--help打印出有关如何使用命令的说明。
例子
将基于文件的程序转换为项目:
dotnet project convert app.cs给定一个包含以下内容 app.cs 的文件夹:
#:sdk Microsoft.NET.Sdk.Web #:package Microsoft.AspNetCore.OpenApi@10.*-* var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapGet("/", () => "Hello, world!"); app.Run();在名为应用的文件夹中运行
dotnet project convert app.cs结果,其中包含:app/app.cs:
var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapGet("/", () => "Hello, world!"); app.Run();app/app.csproj:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net10.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <PublishAot>true</PublishAot> <PackAsTool>true</PackAsTool> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.*-*" /> </ItemGroup> </Project>将基于文件的程序转换为特定输出目录中的项目:
dotnet project convert app.cs --output MyProject