
Damian Edwards 首席架构师
我们非常高兴地介绍.NET 10预览版4中发布的一项新功能,它使得开始使用C#比以往任何时候都更加容易。现在您可以直接使用dotnet run app.cs运行一个C#文件。这意味着您不再需要创建项目文件或构建整个应用程序来运行快速脚本、测试代码片段或尝试新想法。它简单直观,旨在简化C#开发体验,特别是对于初学者来说# 。
dotnet run app.cs?直到现在,使用dotnet CLI执行C#代码都需要一个包含.csproj文件的项目结构。借助这项称为_基于文件的应用程序_的新功能,您可以像使用Python或JavaScript这样的脚本语言一样直接运行独立的.cs文件。
这降低了尝试C#的门槛,使该语言成为学习、原型设计或自动化场景中更具吸引力的选择。
dotnet和您的.cs文件。在.NET 10预览版4中,基于文件的应用程序还支持一组强大的文件级指令,允许声明一些存储在基于项目的应用程序的项目文件中的重要事项,而无需离开单个.cs文件。这些指令让基于文件的应用程序更加灵活和富有表现力,同时保持与MSBuild概念的兼容性。
#:package引用NuGet包您可以在.cs文件中直接使用#:package指令添加NuGet包引用:
#:package Humanizer@2.14.1
using Humanizer;
var dotNet9Released = DateTimeOffset.Parse("2024-12-03");
var since = DateTimeOffset.Now - dotNet9Released;
Console.WriteLine($"It has been {since.Humanize()} since .NET 9 was released.");#:sdk指定SDK默认情况下,基于文件的应用程序使用Microsoft.NET.Sdk SDK。如果您正在构建类似Web API的东西,可以使用#:sdk指令更改SDK:
#:sdk Microsoft.NET.Sdk.Web这告诉工具将文件视为Web项目的一部分,启用ASP.NET Core的功能如Minimal APIs和MVC。
#:property设置MSBuild属性您可以使用#:property配置额外的构建属性。例如:
#:property LangVersion preview这让您的基于文件的应用程序可以选择加入高级语言特性和平台定位,而不需要完整的项目文件。
基于文件的应用程序也支持shebang行(#!),允许您编写跨平台的C# shell脚本,在类Unix系统上直接可执行。例如:
#!/usr/bin/dotnet run
Console.WriteLine("Hello from a C# script!");您可以使文件可执行并直接运行:
chmod +x app.cs
./app.cs这使得C#成为CLI实用程序、自动化脚本和工具的便捷选项,无需项目设置。
当您的基于文件的应用程序变得复杂,或者您只是想要基于项目应用程序提供的额外功能时,可以将其转换为标准项目:
dotnet project convert app.cs此命令会根据您的文件名创建一个新目录,生成一个.csproj文件,将您的代码移至Program.cs文件,并将任何#:指令翻译成MSBuild属性和引用。
给定这个文件:
#: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();生成的.csproj将是:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.*-*" />
</ItemGroup>
</Project>这使得从单个文件到完全功能、可构建且可扩展的项目的过渡无缝进行。
这远非开发者第一次希望在没有项目的情况下运行C#。社区项目如CS-Script,dotnet-script,Cake 等早已填补了这一角色,实现了脚本工作流、REPL体验及其他C#体验。这是Scott Hanselman于2018年关于dotnet-script全局工具的博客文章。
这些工具仍然有价值,值得一看,尤其是在更高级的脚本场景中。然而,有了这种新的内置支持,开发者可以立即开始:无需额外安装、配置或发现步骤。
同样重要的是:这不是一种单独的 C# 方言或模式。我们有意将此功能作为从常规C#基于项目应用程序自然早期“点击停止”的一部分。您正在编写相同的C#代码,使用相同的编译器,当您的代码成长起来后,如果愿意的话,它可以自然地过渡到基于项目的应用程序。
1. 安装.NET 10预览版4 从dotnet.microsoft.com下载并安装它。
2. 安装Visual Studio Code(推荐) 如果您使用的是Visual Studio Code,请安装C# Dev Kit,然后按照以下说明更新C#扩展以支持基于文件的应用程序:
要启用对基于文件的应用程序和指令的支持,您需要最新预发行版本的 C# 扩展:
Ctrl+Shift+X)2.79.83. 编写代码 创建一个名为hello.cs的文件:
Console.WriteLine("Hello, world!");4. 运行它! 在同一文件夹中打开终端并运行:
dotnet run hello.cs5. 转换为项目 要将文件转换为项目,请运行:
dotnet project convert hello.cs观看此功能在微软Build大会演示环节中的实际操作:无需项目,只需C#与dotnet run app.cs
您将看到如何轻松开始、探索指令以及在准备就绪时转换为完整项目有多么容易。
通过dotnet run app.cs,我们让C#变得更加易于接近,同时保留了.NET生态系统的所有强大功能和深度。无论您是在制作原型、教学还是构建生产系统,这项新功能都能帮助您更快地从想法变为执行。
在即将到来的.NET 10预览版中,我们旨在改进在VS Code中处理基于文件的应用程序的体验,增强新文件级指令的IntelliSense,提高性能,并支持调试。在命令行方面,我们正在探索对多个文件的基于文件的应用程序的支持,以及使运行基于文件的应用程序更快的方法。
今天就试一试,并将您的反馈发送到GitHub,随着我们在.NET 10及以后继续塑造这一体验。