在 VS2022 上创建 Blazor/Maui 服务器应用程序并面向 MacOS 时找不到静态文件

Static files not found when creating a Blazor/Maui Server App on VS2022 and targeting MacOS

在 VS2022(Windows)上创建 Blazor Server 模板在 Windows 上运行良好。如果我发布到一个文件夹并定位 Windows,我可以在另一台 windows 机器上打开应用程序,一切都很好。 如果我发布到一个文件夹并定位 OSX,我可以在 Mac 上打开应用程序,并且 HTML 加载,但它找不到 CSS 和图标,除非我将文件从“发布”文件夹复制到我在 Mac 上的主文件夹中。 如果我将 VS2022 用于 MacOS,也会出现同样的问题。当来自 IDE 的 运行 时正常工作,如果我从 IDE 外部发布它或 运行 应用程序,则不会加载 CSS。

几周来一直在寻找这个问题的答案,但我认为几乎没有人使用 VS2022 来创建面向 MacOS 的 Blazor 应用程序,大声笑!

有人 运行 参与其中吗?我试过玩 app.UsePathBase() 和

终于通过我哥找到了天才.NET程序员。他在几分钟内想通了。很简单,但我想了很久。

在program.cs中添加1行:

webBuilder.UseContentRoot(AppContext.BaseDirectory);

旧program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace MacOSBlazorApp1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

之后:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace MacOSBlazorApp1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseContentRoot(AppContext.BaseDirectory);
                });
    }
}

我不知道为什么必须在 MacOS 上添加这个而不是 Windows。我猜 MacOS 上的默认值不知何故不同!