dotnet 项目转换

本文 适用于: ✔️ .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 属性和引用。

这使得从单个文件无缝过渡到功能完备、可生成且可扩展的项目。 当基于文件的应用变得复杂时,或者你只需要基于项目的应用中提供的额外功能,则可以将其转换为标准项目。

转换过程

该命令执行以下作:

  1. 创建一个以输入文件命名的新目录(没有扩展名)。
  2. 使用相应的 SDK 和属性生成 .csproj 文件。
  3. 将源代码移动到与输入文件同名的文件。
  4. #:从源代码中删除指令。
  5. #:sdk转换指令:第一个#:sdk指令成为<Project Sdk="Sdk.Id"><Project Sdk="Sdk.Id/version">属性,任何其他#:sdk指令都变为<Sdk Name="Sdk.Id" /><Sdk Name="Sdk.Id" Version="version" />元素。
  6. #:package 指令 <PackageReference> 转换为项目文件中的元素。
  7. #:property 指令转换为项目文件中的 MSBuild 属性。
  8. 根据检测到的 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
    

另请参阅