当我在 Windows 或 MacOS 中从 Visual Studio 内部运行 .net core (7) 项目时,一切都很好。我看到我的网站按预期运行。当我“发布到文件夹”并在 MacOS 中运行生成的控制台应用程序时,网页找不到我的任何静态文件。这包括 bootstrap、jquery 和 telerik 库以及 favicon。文件存在于已发布的 wwwroot 文件夹中 使其正常工作的正确发布设置是什么?我有 app.UseStaticFiles() ,这在 MacOS 上似乎并不重要。 我尝试了一些方法,包括将所有文件放入根文件夹中,并且还尝试了各个文件的发布设置。没有任何帮助。
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
注意:我也尝试删除
app.UseAuthorization()
这是因为在 Osx 上,wwwroot 位置指向错误的位置,而不是运行应用程序的根文件夹。
在配置方法上尝试此操作以在 MAC 上进行测试:
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.OSX))
app.UseStaticFiles(new StaticFileOptions
{FileProvider = new PhysicalFileProvider(Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "wwwroot")),RequestPath = ""});
如果有效,只需添加一个 else:
else
app.UseStaticFiles();
这个答案基于 jmvcollaborator 的答案:https://stackoverflow.com/a/76376825/9008140。 每当我以任何方式更改发布设置时,我都会遇到编译问题。当我选择“发布到单个文件”(这仍然不是单个文件,令人困惑)时,获取路径的反射代码将失败。这是修改后的代码,在使用“发布到单个文件”时似乎可以工作。根据我收到的错误,我相信它正在内部构建一个 docker 容器。
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
var process = Process.GetCurrentProcess(); // Or whatever method you are using
string path = process.MainModule.FileName.Replace("TwinklyWeb", "wwwroot");
Console.WriteLine("OSX detected. Looking for static files here: " + path);
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(path),
RequestPath = ""
}); ;
}
else
{
app.UseStaticFiles();
}
我做了两件事:
string getFullPath(string relativePath)
{
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
return System.IO.Path.Combine(baseDirectory, relativePath);
}