ASP.NET MVC6:以编程方式设置webroot
在ASP.NET MVC6中,默认情况下从ASP.NET MVC6:以编程方式设置webroot,asp.net,asp.net-core-mvc,Asp.net,Asp.net Core Mvc,在ASP.NET MVC6中,默认情况下从wwwroot提供静态文件 目录wwwroot由键webroot在project.json中定义(如本文所述:) 我想知道是否可以在运行时(启动时)以编程方式设置此webroot 我想在运行时切换webroot,具体取决于在调试或生产模式下运行。因为我的静态资产(JS、CSS…)是在构建时处理的(连接、缩小…),所以我认为最好的方法是有一个包含源资产的目录和一个包含优化资产的目录(构建输出) 在运行时,我希望在生产模式下运行时将webroot指向优化的资
wwwroot
提供静态文件
目录wwwroot
由键webroot
在project.json
中定义(如本文所述:)
我想知道是否可以在运行时(启动时)以编程方式设置此webroot
我想在运行时切换webroot
,具体取决于在调试或生产模式下运行。因为我的静态资产(JS、CSS…)是在构建时处理的(连接、缩小…),所以我认为最好的方法是有一个包含源资产的目录和一个包含优化资产的目录(构建输出)
在运行时,我希望在生产模式下运行时将webroot
指向优化的资产
有人知道如何以编程方式设置webroot
更新2015-11-19:在我的场景中,我只想使用静态文件。正如在回答中指出的,当使用Razor在服务器端呈现html时,可以使用TagHelpers()实现不同资产之间的切换。我将采用不同的方法 首先,当您将应用程序F5时,它会自动将
ASPNET_ENV
设置为Development
。在Razor中,您可以使用TagHelpers切换资源,如下所示:
<environment names="Development">
<link rel="stylesheet" href="~/css/site1.css" />
<link rel="stylesheet" href="~/css/site2.css" />
</environment>
<environment names="Staging,Production">
<link rel="stylesheet" href="~/css/site.min.css" asp-file-version="true"/>
</environment>
这将允许您根据实际运行的环境更改资源/javascript甚至HTML
唯一缺少的是在您的暂存和生产机器上设置ASPNET_ENV
,它将自动拾取。无需动态更改wwwroot
如果您真的想坚持更改wwwroot
,对我来说,这将是一项部署任务,而不是运行时步骤
否则,在已链接的静态文件上。它提供了有关如何在运行时链接不同文件夹的代码示例。也许您缺少的是对IHostingEnvironment
的依赖,它将为您提供环境变量来决定您所处的环境
我的问题的解决方案是根据托管环境切换为静态文件提供服务的目录,如下所示:
public class Startup
{
private IHostingEnvironment env;
public Startup(IHostingEnvironment env)
{
this.env = env;
}
public void Configure(IApplicationBuilder app)
{
if (env.IsDevelopment())
{
var webRootPath = env.WebRootPath;
var webSrcPath = webRootPath + @"\..\wwwsrc";
app.UseDefaultFiles(new DefaultFilesOptions()
{
FileProvider = new PhysicalFileProvider(webSrcPath),
RequestPath = new PathString("")
});
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(webSrcPath),
RequestPath = new PathString("")
});
}
else
{
app.UseDefaultFiles();
app.UseStaticFiles(); // use wwwroot
}
}
通过此设置,我可以将所有前端资产(html、javascript、css)放在wwwsrc
中,并在开发过程中从该目录提供未经处理的服务
我的前端构建(基于gulp)然后处理wwwsrc
中的资产,并将优化的资产(在html中串联、最小化、修改和调整引用)放入wwwroot
如果我想测试发布版本,我可以从wwwroot
提供服务
通过在调试配置文件(项目->属性->调试或文件属性/launchSettings.json
中设置环境变量ASPNET_ENV
,可以在调试和发布版本之间切换
感谢@Maxime Rouiller在他的回答中为我指出了正确的方向。感谢您指出了标记帮助程序,这些帮助程序可以根据环境的不同,在运行时在服务器端以不同的方式呈现html。但在我的场景中,我根本不使用Razor/服务器端渲染,我只想使用静态填充。。。(我据此更新了问题)