从MacOS Finder运行ASP.NET Core可执行文件报错:WebRootPath未找到
问题解决:Finder运行ASP.NET Core可执行文件报WebRootPath找不到
可以从Finder中运行该可执行文件,报错的核心原因是Finder双击启动时,程序的工作目录默认是当前用户的Home目录(/Users/scott),而非可执行文件所在的目录,导致程序找不到同目录下的wwwroot文件夹。以下是两种可行的解决方法:
方法一:修改程序代码,强制指定WebRootPath路径
在Program.cs中添加代码,让程序自动获取自身所在目录,并指向该目录下的wwwroot,不依赖工作目录:
using System.Reflection; using Microsoft.AspNetCore.Builder; var builder = WebApplication.CreateBuilder(args); // 获取当前可执行文件的所在目录 var exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // 强制设置WebRootPath为可执行文件目录下的wwwroot builder.WebHost.UseWebRoot(Path.Combine(exeDir, "wwwroot")); // 后续的其他配置代码... builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); // ... 中间件配置代码 app.UseStaticFiles(); app.UseRouting(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run();
修改后重新发布应用,即可直接从Finder双击运行。
方法二:通过Shell脚本间接启动程序
如果不想修改代码,可以创建一个Shell脚本,先切换到可执行文件所在目录再启动程序:
- 在可执行文件
BlazorApp1的同目录下,创建一个名为启动应用.sh的文件 - 打开该文件,写入以下内容:
#!/bin/bash # 切换到脚本所在的目录 cd "$(dirname "$0")" # 启动应用 ./BlazorApp1
- 打开终端,进入该目录,执行以下命令给脚本添加执行权限:
chmod +x 启动应用.sh
之后双击这个Shell脚本,即可正常启动应用。
内容的提问来源于stack exchange,提问作者Scott Kuhl
相关产品推荐
相关产品推荐

