大数跨境
0
0

dotnet run file 里的两种特殊文件

dotnet run file 里的两种特殊文件 amazingdotnet
2025-11-22
2
导读:dotnet 文件程序里的两类特殊文件run.json 和 settings.json

 

dotnet run file 里的两种特殊文件

Intro

在 dotnet 单文件 C# 支持里有两个特殊的文件可以控制 dotnet 运行时的配置,类比到 ASP.NET Core 项目里就是 launchSettings.json 和 appsettings.json 两个文件

Sample

测试代码如下:

api.cs 文件内容如下:


   
    
   #:sdk Microsoft.Net.Sdk.Web
#:package WeihanLi.Web.Extensions@2.3.0

#:property PublishAot=false

using
 WeihanLi.Web.Extensions;

var
 app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.MapConfigInspector();
app.Run();

这里引用我自己写的一个 nuget 包,来方便进行后续对配置的一个测试,可以参考之前文章的介绍:动手造轮子  -- 实现一个配置检查器

执行 dotnet api.cs 输出结果如下:

`dotnet api.cs`


此时是没有任何 launchSettings.json 和 appsettings.json 配置的,我们在同一目录下新增同名的

  • • api.run.json 对应着 launchSettings.json
  • • api.settings.json 对应着 appsettings.json

api.run.json 配置文件内容如下:


   
    
   {
  "$schema"
: "https://json.schemastore.org/launchsettings.json",
    "profiles"
: {
      "http"
: {
        "commandName"
: "Project",
        "dotnetRunMessages"
: true,
        "launchBrowser"
: true,
        "applicationUrl"
: "http://file-api.dev.localhost:5149",
        "environmentVariables"
: {
          "ASPNETCORE_ENVIRONMENT"
: "Development"
        }
      }
    }
  }

api.settings.json 配置文件内容如下:


   
    
   {
  "AppSettings"
: {
    "Service"
: "file-api"
  }
}

然后我们来再跑一下我们的 api.cs 来试一下看看

`dotnet api.cs with api.run.json`


从控制台输出的信息可以看到和之前相比已经有了一些变化, launch settings 配置会我们的 api.run.json 配置中加载了,绑定的 url 也变了从之前的 5000 端口变成了 5149 而且这里我们使用 dotnet 10 里的一个新特性,可以使用 *.localhost 域名了,在升级 .NET 10 的时候可以考虑加上一个服务名字来更好的分辨不同的服务

我们再从浏览器上试一下新的地址

`file-api.dev.localhost:5149`


我们再来通过自定义 config-inspector 来访问下我们自定义的 config 看看能不能访问到来看是不是有加载自定义的配置,我们访问 http://file-api.dev.localhost:5149/config-inspector/AppSettings:Service

`settings.json test`


可以看到我们的配置已经加载了,并且从 provider 信息可以看出来配置来自 api.settings.json

那么是否支持 appsettings.Development.json 配置呢,我们可以试一下再加一个 api.settings.Development.json 的配置文件,配置文件内容如下:


   
    
   {
  "AppSettings"
: {
    "Service"
: "file-api-dev"
  }
}

我们再来重新跑一下再访问一下这个 config 试一下

`api.settings.Development.json`


从上面的结果可以看出我们的 api.settings.Development.json 也被加载了,说明是支持 appsettings[.Environment].json 的配置的

More

从前面的输出结果我们可以看出我们的 content root 就是 api.cs 所在目录,我们也可以去写 razor pages 或 Blazor 或者结合前端的 SPA 来一起用,这里我们可以试一下,返回一个 index.html

新建一个 webapp.cs 文件内容如下:


   
    
   #:sdk Microsoft.Net.Sdk.Web
var
 app = WebApplication.Create(args);
app.UseFileServer();
app.Run();

然后在同一目录下先建一个 wwwroot 目录然后建一个 index.html,内容比较简单如下所示:


   
    
   <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello World</title>
</head>
<body>
    <h1>Hello dotnet run file!</h1>
</body>
</html>

接着我们来执行一下 dotnet webapp.cs,接着访问一下

`dotnet webapp.cs`
`dotnet webapp.cs - index.html`


更多用法可以参考 Damian 的这个仓库里的一些例子

https://github.com/DamianEdwards/runfile

 

【声明】内容源于网络
0
0
amazingdotnet
dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
内容 539
粉丝 0
amazingdotnet dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
总阅读167
粉丝0
内容539