大数跨境
0
0

dotnet 10 run file 支持多文件

dotnet 10 run file 支持多文件 dotNET跨平台
2025-11-30
17
导读:dotnet 10 run file 支持多文件的一种方式Intro目前 dotnet run file

dotnet 10 run file 支持多文件的一种方式

Intro

目前 dotnet run file 还没有官方支持多文件,不过因为会遵循 build file,会使用常用的 build 文件如:

Directory.Build.props/Directory.Build.target/Directory.Build.rsp/Directory.Packages.props

所以我们可以利用这一点来自己实现一个多文件的支持,官方的支持要等到 .NET 11 来支持了,如果你真的确实有这样的需求不妨尝试一下

Implement

我们现在可以在单文件里指定 build property,不能指定 item,所以我们可以在 property 里指定要依赖的文件,然后通过自定义 build 逻辑来将属性里 import 的文件路径来转换成编译项 <Compile Include="$(Import)" />

我们新建一个 Directory.Build.targets 来支持将属性转换成编译项来共同编译,示例如下:


   
    
   <Project>
  <ItemGroup Condition="'$(Imports)' != ''">
    <_ImportedFiles Include="$(Imports.Split(';'))" />
    <Compile Include="@(_ImportedFiles)" />
  </ItemGroup>
</Project>

我们这里通过 Imports 属性转换成 Compile 编译项,在单文件 C# 文件(multi-file-test.cs)内容如下:


   
    
   #:property Imports=TestHelper.cs

using
 static Test.TestHelper;

PrintMessage("Hello from multi-file test!");

这一文件依赖了同目录下另外一个 C# 文件 TestHelper.cs 定义了一个 TestHelper 类型,类型里定义了一个 PrintMessage 方法,文件内容如下:


   
    
   namespace Test;

public
 static class TestHelper
{
    public static void PrintMessage(string message)
    {
        Console.WriteLine(message);
    }
}

此时我们来执行下 dotnet multi-file-test.cs 来测试一下


`multi-file-test`

可以看到成功编译并且成功打印出了信息

那会不会影响其他的文件呢,其实没影响的,因为其他文件没有设置 Imports 也不会新增编译项,比如说我们同一目录下还有一个之前测试的 hello.cs, 文件内容如下:


   
    
   #!/usr/bin/env dotnet
Console.WriteLine("Hello .NET 10!");

我们执行下 dotnet hello.cs 可以看到不会有什么影响的


`dotnet hello.cs`

有需要的朋友可以自己尝试一下哈

References

  • • https://github.com/WeihanLi/SamplesInPractice/tree/main/net10sample/file-programs

【声明】内容源于网络
0
0
dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,
内容 898
粉丝 0
dotNET跨平台 专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,
总阅读14.7k
粉丝0
内容898