如何在ASP中配置一个备用文件夹.净的核心



是否可以配置一个不同的文件夹来代替ASP中的wwwroot ?网络核心?如果是,又是怎么回事?这种改变有什么副作用吗?

当前在整个项目中包含wwwroot的唯一配置是在project.json中找到的,如下面的代码所示;但是将值替换为新文件夹的名称不足以读取静态文件(例如:index.html)。

"publishOptions": {
    "include": [
        "wwwroot",
        "web.config"
    ]
},

是否可以配置一个不同的文件夹来代替ASP中的wwwroot ?网络核心?

是的。在Program类中添加UseWebRoot调用:

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseWebRoot("myroot") // name it whatever you want
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();
    host.Run();
}

这种改变有什么副作用吗?

我能想到的有三个:

  1. Bower包管理器将不能正常工作,因为它在wwwroot中查找lib文件夹。我不确定这是否可配置。
  2. 你需要修复bundleconfig.json来查看新目录。
  3. 您需要更新project.json中的include部分,以便在发布输出中包含您的新目录。

ASP。. NET Core 2.2,在你的StartupConfigure()方法中,你可以改变如下:

app.UseStaticFiles();

app.UseStaticFiles(new StaticFileOptions
{
  FileProvider = new PhysicalFileProvider(Path.Combine(
    AppDomain.CurrentDomain.BaseDirectory,
    "myStaticFolder")),
});

参考资料/来源(auch auf Deutsch)

ASP。. NET Core 6,如果你使用新的最小主机模型与WebApplication类,那么最简单的方法是通过WebApplicationOptions类的WebRootPath属性来配置它:

var builder = WebApplication.CreateBuilder(
    new WebApplicationOptions() 
    {
        WebRootPath = "mywebroot"
    }
);

默认情况下,最小托管模型是在使用Visual Studio 2022+或。net 6 SDK模板生成的web应用程序中配置的,所以这可能是新ASP最熟悉的方法。. NET Core 6应用程序。

虽然入口点已经更改为WebApplication,但技术上仍然可以通过最小托管模型到达UseWebRoot(),正如在接受的答案中所建议的那样,但是调用它将产生一个警告,建议使用WebApplicationOptions

最新更新